-
计算机最底层是以二进制组织和存储数据的,一个字节当中,最高位是表示符号位,1表示负数,0表示整数,其余的七个位则是真正的数值。
例如 十进制 -1 转换成二进制就是 1000 0001.
-
原码:
原码就是十进制转换成二进制后的机器码[-16]原码 = 1001 0000 [+16]原码 = 0001 0000
-
反码:
正数的反码与原码相同,
负数的反码就是除了符号位的其他位取反[-16]原码 = 1001 0000 [-16]反码 = 1110 1111
-
补码:
正数的补码与原码相同
负数的补码取反+1[-17]原码 = 1001 0001 [-17]反码 = 1110 1110 [-17]补码 = 1110 1111 注: 原码快速取负数补码的方法,从右往左看,当遇到第一个1,这个1不用变,后面除了符号位之外的位全部取反就可以。------ 首位不动,中间取反
补码的补码就是源码
[-17]补码 = 1110 1111 [-17]反码 = 1001 0000 补码取反 [-17]原码 = 1001 0001 +1
-
早期数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法需要转换成加法
18 + (-8) = ? 原码直接相加 0001 0010 + 1000 1000 ------------------ 1001 1010 18 + (-8) = (-26) ? 肯定是不对的
于是补码出现了,成功解决了这一问题
0001 0010
+ 1111 1000
------------------
10000 1010
最高的第9位是一个溢出位,会被自动舍去。
所以得到 0000 1010 十进制 10
例 20 +(-30) = ?
0001 0100
+ 1110 0010
------------------
1111 0110 (补码的补码是原码)
1000 1001 (再+1)
1000 1010 (原码)
最高的位是1,所以是 -10。