结论
对于正数:源码、反码、补码相同;移码为补码符号位取反。
对于负数:
原码符号位为1;
反码为符号位为1,其他位取反,反码 = 原码(符号位不变)其他位取反;
补码为符号位不变,其反码加1,补码 = 反码 + 1;
移码为补码符号位取反。
应用
反码:解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则;
- eg:8位二进制计算,原码带符号位运算存在问题;
- -1=1000 0001(原码)
- +1=0000 0001(原码)
- 加和:1000 0010(原码) = -2 不正确
反码解决原码做加法运算:
- -1=1111 1110(反码)
- +1=0000 0001(反码)
- 加和:1111 1111(反码) = 1000 0000(原码) = -0 = 0
补码:解决负数加法运算正负零问题,弥补了反码的不足。我们知道+0和-0是一样的,但是0带符号是没有任何意义的。补码定义为其反码+1,正负相加值溢出后归为0
+0=0000 0000(原码)= 0000 0000 (反码)= 0000 0000(补码)
-0=1000 0000 (原码) = 1111 1111(反码)=0000 0000(补码)
反码与补码都是为了解决负数运算问题,跟正数没关系,不管是正整数还是正小数,原码,反码,补码都全部相同。
在实际应用中,常用到的是补码的补码是原码,补码 = 反码 + 1。
版权声明:本文为qq_41592706原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。