我原本期望这段代码会输出一个非常大的数字以及比该数字小1的数,但实际上它只输出了-1和-2,这是为什么呢?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
%d
格式是有符号整数(十进制)格式。整数使用二进制补码进行存储,这意味着最高位(8000 0000)在某种程度上表示值的符号。
从3开始倒数,值为:
0000 0003 = 3
0000 0002 = 2
0000 0001 = 1
0000 0000 = 0
FFFF FFFF = -1
FFFF FFFE = -2
如果你希望将 FFFF FFFF 显示为一个大的正数,可以使用 %u
(无符号) 格式。
有符号整数的第一位是表示符号的,因此可以存储的最大数字是0xEFFFFFFF。