一个有关原码、反码、补码的小问题

int x = 1 , y = ~x ; 求y的值。

 

我开始算出结果为e,不过这个结果是错的。

思路:因为计算机是以二进制的补码的形式来储存,所以我们要将 ~1 转换成补码,又因为补码是在反码的基础上转换而来,而反码又是原码转换来的,所以得将 ~1 装换成原码。

以下是正确算法:

∵ 1 = [原] 00000001;

∴ ~1 = [原] 11111110;  //先将1取反 , 然后再转换成原码

∴ [原] 11111110 = [反] 10000001;  //将转换后的原码再转换成反码

∴ [反] 10000001 = [补] 10000010;  //因为反码为负数,所以转换补码需要加一

∴ [补] 10000010 = -2;  //补码最后的结果为-2

 

如果这里面有什么不对的,或是有遗漏的,望大家勿喷。

posted @ 2017-06-24 10:45  刃上行  阅读(48)  评论(0编辑  收藏  举报