在二进制码中,为了区分正负数,采用最高位是符号位的方法来区分,(符号-绝对值 编码系统)
- 正数的符号位为0
- 负数的符号位为1
剩下的就是这个数的绝对值,可以采用原码、反码、补码3种形式来表示绝对值部分。
原码
原码最简单,也最好理解。原码就是绝对值的二进制数形式:
- +7的8位二进制原码是00000111
- -7的8位二进制原码是10000111
但对于二进制运算而言,原码的运算不够方便,当两个数相加时,先要判断这两个数的符号是否相同,符号不同的话,还要判断哪一个数的绝对值更大。所以在计算机中,通常都是采用补码形式。
补码
正整数的补码与原码形式相同,例如+7的8位二进制补码是00000111;
而负整数的补码则可以求其反码
。
👉将这个负整数的绝对值求反,连同符号位1一起表示(符号位不变)。
反码再在末位加1就得到了补码。
例如-7的8位二进制补码:将-7的绝对值7求反加1得1111001,连同符号位1一起就是11111001。 +13和-13的8位二进制补码:
- +13d=00001101
- -13d=11110011
补码的作用:
比如,一个小孩,很小的。他只认识 100 个数,也不会做减法。
那么,减一,就可以告诉他,用加 99 代替:
36 - 1 = 35
36 + 99 = (1) 35
忽略进位,结果不是一样的吗?
99、-1,互为补数。补码,也就是二进制的补数。
- 255(1111 1111),就是-1 的补码;
- 254(1111 1110),就是-2 的补码;
总结补码的作用:
- 0的表示唯一
- 符号位可作为数值加入运算
- 补码运算的结果仍然为补码 ( 要转为原码:符号位不动,数值位求反+1)