近日学到了原码补码反码移码这部分,被各种定义,各种转换的口诀什么的弄的也是烦了,所以就在思考能不能用一种简洁的方式将他们讲出来呢?这就是这篇博文的来源了。首先我们需要了解的是原码补码反码的定义,只有这样我们才能够很好地理解他们之间的关系。
##原码
##补码
##反码
这里我们需要知道的一个隐藏的知识是
一串n位的二进制码与其反的和为2^(n+1) - 1。
接下来,对于原码补码与反码之间,定点整数与定点小数都存在如下的转化关系
- 当真值X>0时
补码反码与原码的表示形式一致
- 当X<0时
原码转反码:符号位不变,数值位取反
反码转补码:反码+1
原码转补码:符号位不变,从最低位开始数到的第一个1不变,之后开始的所有位取反
##移码
移码与补码的关系(无所谓小数整数,负数正数)就是补码的符号位取反就是移码。
举例如下表
- 定点整数
- 定点小数
我们注意到以下几点
- 原码与反码有+0和-0的说法
- 上限都是2^n-1(n是机器字长)
- -2^n只有补码和移码有这样的表示
好了,基本情况就是这样了,欢迎批评指正。