原码、补码、反码
原码、补码、反码
数据的常见分类
机器数和机器数的真值
-
计算机中所有的数据都是以二进制保存的;
-
在机器数中,使用最高位来表示数字的正负:“1”为负,“0”为正。一个字长为8位;
-
机器数的真值就是机器数所对应的真正的数值,例如:例如:
+3(真值)=0000 0011 +3就是真值
-3(真值)=1000 0011 -3就是真值
原码
- 符号位:首先确定一个数的正负,如果是正数,首位用0表示,如果是负数,首位用1表示;
- 有效位:真值的绝对值转换二进制形式;
- 将符号位和有效位拼接到一起,就得到了原码;
反码
-
正数:正数的反码和原码相同,例如:
+3=0000 0011【原】=0000 0011【反】
-
负数:符号位不变,其余各位直接取反(1变成0,0变成1),例如:
-3 = 1000 0011【原】=1111 1100【反】
补码
-
正数:正数的原码反码补码全部相同,例如:
+3=0000 0011【原】=0000 0011【反】=00000011【补】
-
负数:求得原码,再求反码,最后一位+1,例如:
-
-3 = 1000 0011【原】=1111 1100【反】=11111101【补】
为什么需要反码和补码
- 反码:在设计计算机的时候只设计了加法器,没有减法器使用加法计算来表示减法,但是会出现正负相加 0的表示不唯一;
- 补码:反码解决了没有减法器的问题,但是会出现正负相加0的表示不唯一,所以使用补码进行修正。
补码转原码
- 正数:补码=反码=原码
- 负数:加-1,符号位不变,其余取反(将补码当成原码,再求一遍补码),例如:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xPYFY76a-1590409500404)(原码、补码、反码/图片/image-20200525170309921.png)]
反码转原码
- 正数:不用转
- 负数:符号位不变,其余取反