计算机原码,补码,反码

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

所以计算机用补码表示

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容