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);
您好,我有一个名为 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);