原码、反码、补码、移码区别及应用

结论

对于正数:源码、反码、补码相同;移码为补码符号位取反

对于负数:

原码符号位为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版权协议,转载请附上原文出处链接和本声明。