原码 反码 补码
对计算机中常见数据简单分类
机器数与真值
原码
反码
补码
扩展
对计算机常见数据的分类
机器数
数值在计算机中的二进制表现形式
机器数在计算机中有符号,最高位表示符号,使用0表示正,使用1表示负
一个字节8个bit位表示,一个字=两个字节
+5=0000 0101
1000 1010=-10
真值
机器数所表示的真正的数值
如:1000 1010 = -10
原码
原码就是符号位加上真值的绝对值
- 原码表示范围:-127到 -0 ,+0到+127
反码
正数:正数的反码=原码 如:+3=0000 0011[原码]=0000 0011[反码]
负数:符号位不变,其余各位直接取反,1->0,0->1
-7 :[原码]1000 0111
[反码]1111 1000
-33:1010 0001->1101 1110
- 反码的表示范围:-127到-0,+0到+127
补码
-5 = 1000 0101 原码
1111 1010 反码
计算机中数据以补码的形式存储,同样以补码的形式参与运算
正数:原码=反码=补码 如:+3=0000 0011[原码]=0000 0011[反码]=0000 0011[补码]
负数:首先求得反码,在反码的基础上+1[加到最低位]
补码的表示范围-128 到 -1,0 到127
-34:1010 0010->1101 1101->1101 1110
-29:1001 1101->1110 0010->1110 0011
-47:1010 1111->1101 0000->1101 0001
-128:1111 1111->1000 0000->1000 0001
注意:-128没有原码和反码,规定-128的补码为1000 0000
单击查看:-128的原码,反码,补码
为什么需要反码和补码
-
反码
- 在设计计算机的时候只有加法器没有减法器,为了将减法转换为加法,设计了反码,但是反码有缺陷:正负相加,0的表示不唯一;
-
补码
- 为了解决反码正负相加不唯一的情况,使用高位溢出解决;
将补码转换为原码
正数:不需要转
负数:求补码的补码
将负数的补码当做原码然后求该原码的补码
计算规则:符号位不变,其余各位直接取反,然后加1;