c为什么会打印一个负数?

时间:2009-09-29 13:10:00

标签: c hex

我原本希望打印一个非常大的数字和相同的数字-1,但它只打印-1和-2,为什么会这样?

fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);

4 个答案:

答案 0 :(得分:30)

%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(无符号)格式。

答案 1 :(得分:8)

参数“%d”将输入打印为有符号整数。因此,您发现了two's complement representation,请改为考虑“%u”。

答案 2 :(得分:4)

您提到的值是-1和-2

的二进制补码表示

查找two's complement

答案 3 :(得分:3)

有符号整数的第一位是符号,因此可以存储的最大数字是0xEFFFFFFF。