首页 文章

printf的格式很长的论点是什么?

提问于
浏览
408

printf 函数采用参数类型,例如 %d%i 用于 signed int . 但是,我没有看到 long 值的任何内容 .

7 回答

  • 184

    我想你的意思是:

    unsigned long n;
    printf("%lu", n);   // unsigned long
    

    要么

    long n;
    printf("%ld", n);   // signed long
    
  • 16

    在说明符之前直接放置一个 l (小写字母L) .

    unsigned long n;
    long m;
    
    printf("%lu %ld", n, m);
    
  • 11

    在大多数平台上, longint 的大小相同(32位) . 不过,它确实有自己的格式说明符:

    long n;
    unsigned long un;
    printf("%ld", n); // signed
    printf("%lu", un); // unsigned
    

    对于64位,你需要一个 long long

    long long n;
    unsigned long long un;
    printf("%lld", n); // signed
    printf("%llu", un); // unsigned
    

    哦,当然,它在Windows中有所不同:

    printf("%l64d", n); // signed
    printf("%l64u", un); // unsigned
    

    通常,当我打印64位值时,我发现以十六进制打印它们很有帮助(通常数字很大,它们是指针或位字段) .

    unsigned long long n;
    printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"
    

    将打印:

    0x00000000DEADBEEF
    

    顺便说一句,“长”并不意味着那么多(在主流x64上) . “int”是平台默认的int大小,通常为32位 . “长”通常是相同的大小 . 但是,它们在旧平台(以及现代嵌入式平台上)具有不同的可移植性语义 . “long long”是一个64位的数字,通常是人们想要使用的,除非他们真正知道他们在编辑一个x平台可移植代码时正在做什么 . 即便如此,他们可能会使用宏来代替捕获类型的语义(例如uint64_t) .

    char c;       // 8 bits
    short s;      // 16 bits
    int i;        // 32 bits (on modern platforms)
    long l;       // 32 bits
    long long ll; // 64 bits
    

    回到当天,"int"是16位 . 您认为现在它将是64位,但不会,这会导致疯狂的可移植性问题 . 当然,即使这是对神秘和历史丰富真相的简化 . 见wiki:Integer

  • 11

    这取决于,如果您指的是unsigned long,则格式化字符为 "%lu" . 如果您指的是签名长,格式字符是 "%ld" .

  • 524
  • 0

    如果您打算像我一样打印 unsigned long long ,请使用:

    unsigned long long n;
    printf("%llu", n);
    

    对于所有其他组合,我相信您使用the printf manual中的表格,获取行,然后选择您要尝试打印的类型的列标签(就像上面的 printf("%llu", n) 一样) .

  • 56

    我想回答这个问题肯定需要知道你正在使用的编译器名称和版本以及它正在编译的平台(CPU类型,操作系统等) .

相关问题