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 的补码
所以计算机用补码表示