int x = 1 , y = ~x ; 求y的值。
我开始算出结果为e,不过这个结果是错的。
思路:因为计算机是以二进制的补码的形式来储存,所以我们要将 ~1 转换成补码,又因为补码是在反码的基础上转换而来,而反码又是原码转换来的,所以得将 ~1 装换成原码。
以下是正确算法:
∵ 1 = [原] 00000001; ∴ ~1 = [原] 11111110; //先将1取反 , 然后再转换成原码 ∴ [原] 11111110 = [反] 10000001; //将转换后的原码再转换成反码 ∴ [反] 10000001 = [补] 10000010; //因为反码为负数,所以转换补码需要加一 ∴ [补] 10000010 = -2; //补码最后的结果为-2 |
如果这里面有什么不对的,或是有遗漏的,望大家勿喷。