计算机原码,补码,反码

338 阅读3分钟

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 的补码

所以计算机用补码表示