C - 需要解释 printf 选项的行为

C - Need explanation on printf options' behavior

您好,我有一个名为 outputSampleRate 的双变量,其值为 0x41886a0000000000

我正在尝试 printf 选项的不同组合,但我对输出感到非常困惑。

代码如下:

    printf("\n\noutputSampleRate  0x%16x       \n", outputSampleRate);
    printf("outputSampleRate  0x%llx       \n", outputSampleRate);
    printf("outputSampleRate  0x%.llx       \n", outputSampleRate);
    printf("outputSampleRate  0x%.16x       \n", outputSampleRate);
    printf("outputSampleRate  0x%16llx       \n", outputSampleRate);
    printf("outputSampleRate  0x%.16llx       \n\n", outputSampleRate);

这是控制台上的打印输出:

outputSampleRate %llx  0x               0
outputSampleRate %16x  0x41886a0000000000
outputSampleRate %.llx  0x41886a0000000000
outputSampleRate %.16x  0x0000000000000000
outputSampleRate %16llx  0x41886a0000000000
outputSampleRate %.16llx 0x41886a0000000000

如有错误请指正:

%llx    print as long long (64 bit) in hex representation
%16x    print 16 digits, ignore leading 0s in hex representation
%.llx    ????what is this?
%.16x    print at least 16 digits in hex repesentation
%16llx   print 16 digits as a long long in hex representation
%.16llx  print at least 16 digits as a long long in hex representation

此外,我还有以下问题:

1. How does %llx give me 0x               0  ?
2. Why %.llx and %.16x behave differently   ?

感谢您为拯救这个 C 新手所做的任何输入。

%llx 并不代表 "print as long long in hex"。这意味着 参数是(具有类型)long long。如果您违反此要求,您的程序将具有未定义的行为。

如果要打印 double 的表示,请执行以下操作:

double x;
uint64_t x_repr;
memcpy(&x_repr, &x, sizeof x_repr);
printf("%" PRIx64 "\n", x_repr);