文章目录
原码,反码,补码和移码
无符号数
有符号数:
定点整数和定点小数最高位是符号位,一位表示符号位,七位表示数值位。(前提机器字长是8位)
0作符号位表示正的,1作符号位表示负的
可以用原码,反码,补码来表示定点整数和定点小数,还可以用移码来表示定点整数。
原码:
原码整数的范围就是**-127 — 127**。
真值0 对应着两种状态,-0(1000 0000)和+0(0000 0000)

反码:
如果符号位是0,则反码和原码相同。(正数不变)
如果符号位是1,则数值位全部取反。(负数的数值位要取反)

补码:
正数的补码 = 原码
负数的补码 = 反码的末位+1(要考虑进位)

- 关于补码中的
0
:


移码:
在补码的基础上将符号位取反。
注意:移码只能用于整数

移码和补码的关系是一一映射的。

如果把移码整个都看作是无符号位数,当真值增大的时候,对应的无符号数也是在逐一递增的。
以上总结

原码和补码的真值0有两种表示。
补码和移码的真值0只有一种表示。所以补码和移码可以多表示一个负数
- 练习:

- 小技巧:
已知x 的补码,怎么快速求-x 的补码?
将符号位和数值位全部取反,末位+1
各种码的作用
使用原码计算,如果是无符号数进行计算,那么加法和减法的结果都是正确的;但是如果是有符号数进行计算,那么加法运算必须按照减法运算的规则来运算才能得到正确的答案。如果加法使用加法器,减法使用减法器,那么就会导致硬件的设计成本增加,复杂度增加,这个时候就有人考虑到可否使用加法来代替减法。-3对12取余的结果是9,9对12取余的结果也是9。在模12的条件下,-3和9是等价的。-3和9也是互补的,两者的绝对值之和 = 模值。举例子:1+(-3) = 1+9。因为-3和9是一模一样的。
如果在模m的情况下,找到**负数**的补数
,才可以用正数的加法来代替减法。将x - y改成加法(这里规定y必须是正数
),就需要先找出-y
的补数z,补数z和-y
是一模一样的,所以z可以代替-y
来进行运算,这样减法就变成了加法。已知模(-y
的绝对值)就可以算出-y
的补数:z(y的补数) = 模 -(-y的绝对值)。
举个例子:14 -14 ,这里需要算出负数的补数,-14的补数 = 模 - (-14的绝对值) = 1,0000 0000 - 0000 1110 = 1111 0010,这个1111 0010就是-14的补数,也就是-14的补码。是即将代替-14的作加法的数。然后就是14 + 刚求的补码就是最后的答案。0000 1110 +1111 0010 = 1,0000 0000 = 0。
通过以上的例子也反映了补码的作用,让减法操作变成加法操作,节省硬件成本(在ALU中只需要设计加法电路,不用设计减法电路)。