1. 如何取得反码
假如一串数字中只有m,n这两个数,那么mn我们如何取反
我们需要用m+n这个和来减去每一位就能得到nm,就得到反了
在二进制中除了0就是1,取反就更简单了
于是就有0101取反,使用1+0=1减去每一位
1111-0101=1010
2. 补码来历
补码的来历是使计算机只用加法器(减法器实现复杂费时,需要判断绝对值大小,然后大的减去小的,再让符号以大的为准)
假设6点,我们需要到3点有两种方式(倒流,快进)
- 时间倒流3个小时,记为 -3
- 时间快进9个小时,记为 +9
所以这里 6 ”-3” = 6 “+9” =3 (12小时制时钟 , 到了12自动清0)-3和+9是等价的,也就是说减法可以用加法来做
3. 为什么是补码快捷计算是 反码+1
从时钟我们可以得到一个结论,
- 负数+模=该负数补数,如-3+12=9
- 一正一负如果互为补数, | 正 | + | 负 |= 模,如3+9=12
那么计算机存储与时针是相似的
计算机中数均放在寄存器中,通常称寄存器中的位数为机器字长
假如机器字长是2(一位符号位),一旦到了2就自动清0
假如机器字长是5(一位符号位),一旦到了16就自动清0
由结论1:
1,1011 的补码 公式-1011+ 10000=0101
但是问题是0,0101的补数为也为 0101
所以对于
- 正数的补数我们写成 0,0101
- 负数的补数我们写成 1,0101
那么我们如何对正数补数添0,负数补数添1?
第五位的权值为24,所以我们还需要加24
-1011的补码为 :-1011+ 10000 + 10000= -1011+100000 = 1,0101
+1011的补码为 :+1011+ 10000 + 10000= +1011+100000 =101011=0.0101
这就完成了目的
最后我们得出补码的公式为:
该数补数
= 2n+1 + 该数
= 1111111...+1+该数
=(111111....+该数)+1
= 反码 +1 (由第一个可知)