二进制补码
在计算机系统中,数值一律用二进制补码进行表示,补码的计算规则是:
补码 等于 原码按位 取反 再 加 1。
有符号类型的数值,最高位是符号位,1为负数,0为正数。
按照补码计算规则,可得 正数的补码等于其原码。
如:
char num;
num = 1;
如 +1 的原码是 0000 0001 ,补码也是 0000 0001;
而 - 1 的补码是 1111 1111。
以下以8位有符号类型的数值来认识一下补码:
可以看到,当用8位来存储数据时,数据的大小范围是 -128到127。
可以发现,+127加1后,如果是无符号的,表示的是128,但如果是有符号的,则刚好是-128的补码,再加1,是-127的补码。
而,-1加+1后,又变为0,回到了表格的起点。
0 1 2 3 …… 126 127 -128 -127 -126 -2 -1 0
可以发现,8位能表示的最大的值加1后 变成8位能表示的最小的值,形成首尾相接的一个环。
有一个办法可以快速的算出负数的补码:
-1的补码:0xff(255) = 256 - 1
-2的补码:0xfe(254) = 256 - 2
-127的补码:0x81(129) = 256 - 127
-128的补码:0x80(128) = 256 - 128
可以发现,负数的补码 = 256 - |负数自身|,当然这只是8位时的情况。
如果是 n 位的:
负数的补码 = 2^n - |负数自身|