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

use*_*033 6 c hex

我期待这个打印一个非常大的数字和相同的数字-1,但它只打印-1和-2,为什么这个?

fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
Run Code Online (Sandbox Code Playgroud)

Bob*_*man 30

%d格式是一个有符号整数(十进制).使用二进制补码存储整数,这意味着高位(8000 0000)以某种方式表示值的符号.

从3开始倒数,值是:

0000 0003 = 3
0000 0002 = 2
0000 0001 = 1
0000 0000 = 0
FFFF FFFF = -1
FFFF FFFE = -2
Run Code Online (Sandbox Code Playgroud)

等等

如果希望FFFF FFFF显示为大的正数,请使用%u(无符号)格式.

  • int是%d,unsigned是%u,long int是%ld,long unsigned是%lu (3认同)
  • 不,%d表示带符号的十进制,%u表示无符号十进制. (2认同)

Ric*_*ard 8

参数"%d"将输入打印为有符号整数.结果,您发现了两个补码表示,请考虑"%u".