数字在计算机中是以补码形式存储的
例子:
#include <stdio.h>
main()
{
int b;
b=-1; printf("%d %x\n",b,b);
b=0xffffffff;
printf("%d %x\n",b,b);
b=0x8fffffff;
printf("%d %x\n",b,b);
b=0x80000001;
printf("%d %x\n",b,b);
b=0x80000002;
printf("%d %x\n",b,b);
}
输出结果:
-1的原码为0x80000001,但是输出为ffffffff
0x8fffffff对应的十进制为-268435455(第一位为符号位),输出为-1879048193,对应-0x70000001,即输出的是它的补码形式
0x80000001对应的十进制为-1,输出为-2147483647,对应-0x7FFFFFFF,即输出的是它的补码形式
0x80000002对应的十进制为-2,输出为-2147483646,对应-0x7FFFFFFE,即输出的是它的补码形式
得出结论,计算机中数是以补码形式保存的,即“补码表示法”。
short的范围是-128~127,即-27~(27-1)。正数好理解。这里有个问题,0分正0和负0,如何表示。答案是最小的负数不是1111 1111,而是1000 0000,即“负0”。
计算机中的数是以补码表示的。