【发布时间】:2010-12-02 07:42:45
【问题描述】:
我原以为这会打印一个非常大的数字和相同的数字 -1,但它只打印 -1 和 -2,这是为什么呢?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
【问题讨论】:
我原以为这会打印一个非常大的数字和相同的数字 -1,但它只打印 -1 和 -2,这是为什么呢?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
【问题讨论】:
%d 格式是有符号整数(十进制)。整数使用two's complement存储,这意味着高位(8000 0000)在某种程度上表示值的符号。
从 3 开始倒数,值为:
0000 0003 = 3
0000 0002 = 2
0000 0001 = 1
0000 0000 = 0
FFFF FFFF = -1
FFFF FFFE = -2
等等
如果您希望 FFFF FFFF 显示为较大的正数,请使用 %u(无符号)格式。
【讨论】:
参数“%d”将输入打印为有符号整数。结果,您发现了two's complement representation,请考虑改为“%u”。
【讨论】:
有符号整数的第一位是符号,因此可以存储的最大数字是 0xEFFFFFFF。
【讨论】:
您提到的值是-1和-2的二进制补码表示
【讨论】: