1. 原码
就是数字的绝对值转换之后,加上符号位
比如
+1 转换后 0001
-1 转换后 1001
2. 反码
就是在原码的基础上,符号位不变,其余取反
比如
+1 转换后 0110
-1 转换后 1110
3. 补码
就是在原码的基础上,符号位不变,其余取反
比如
+1 转换后 0110
-1 转换后 1111
为什么计算机都是补码存储
1,如果用原码存储
比如
2-1 = 0000 0010 + 1000 0001 = 1000 0011 = -3
结果就是错误的
2, 如果用反码
比如
2-1 = 0000 0010 + 1111 1111 = 0000 0000 = 0
结果也是错误的
综上所述,计算机用原码,反码,进行运算都是错误的
3, 同余理论
什么是同余
两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余
记作 a ≡ b (mod m)
读作 a 与 b 关于模 m 同余。
举一个例子
时钟,比如现在是六点,我们想把时钟拨到八点,有几种方法呢?
1, 可以把时钟向前拨两下,也就是 6 + 2 = 8
2,可以把时钟向后拨10下, 也就是6 - 10 = 8
而这里的2和-10有什么关系呢,
这里引入一个模的概念
什么是模?
模就是一个循环,一个轮回,就是一个数字你加上模之后,表现形式就是一样的,比如 时钟1点和时钟13点在时钟是表现是一样的,所以时钟的模就是12,
所以 1 ≡ 13 (mod 12)
而负数的同余呢?
比如 -1的同余
负数的同余等于模减去负数的绝对值,这里就是
-1 ≡ 11 (mod 12)
这里引入一个定理
如果a ≡ b (mod m),c ≡ d (mod m) 那么:
(1)a ± c ≡ b ± d (mod m)
(2)a * c ≡ b * d (mod m)
4, 补码
这里回到上面的 2 - 1
这里假设用两个字节表示数字,也就是八位
首先确定这里的模是多少?
因为一共八位,但是最高一位是正负,所以一共7位,而七位的模是多少呢?
比如1 和 129 在计算机里边表示就是一样的
因为1 = 0000 0001
129 = 1 0000 0001
因为一共八位,所以129 的最高一位1,因为超过八位,所以背删除,
所以表示就是
129 = 0000 0001
所以这里的模就是128
通过上面的a ± c ≡ b ± d (mod m) 则 -1 ≡ 127 mod 128 =>
2 -1 ≡ (2 + 127) mod 128 ≡ 2 + 127
因为在八位表示数字的时候,mod128就相当于舍弃最高一位
2 - 1 = 0000 0010 + 1111 1111 = 1 0000 0001
而127是啥呢
127就是 -1 的补码
所以计算机用补码表示