一般的说法是负数的补码为其原码除符号位外取反然后总体加一,也就是说,要得到一个负数数的补码,要先知道这个负数的原码才行。那么,问题出现了,在8位长度下,-128的原码与反码都不存在,因为一个字节的有符号数的原码范围是: -127 ~ + 127 ,既然不存在 -128的原码那么就无法求出 -128 的补码了,怎么办? 其实,这个问题的实际意义是,既然说计算机内部的有符号整数都是补码,那么怎么才能有效的实现这一设计呢?潜意识是:根据上面由原码推导出补码的理论,如果是正数,计算机得到其原码,也就是得到了其补码(正数补码等同于原码),如果是负数,先得到其原码,然后再取反加一就可以了。也就是说按这个思维设计编译器,或计算机电路,就可以了。但是如果出现开始说的 -128的补码问题,这个设计就不能工作了。其实,在真正的设计中,这种获得负数补码的方案根本没有实施过! 拿现代的计算机举例,输入设备只有键盘,通过编辑器程序把键盘的扫描码变成ascii码(一般如此)存储起来,比如输入 ‘a’就存储 0x61 ,输入 ‘5’就存储 0x35 ,这些正整数0x61 ,0x35 就是阅读全文>
发表于 @ 2008年07月04日 17:54:00|评论(loading...)|收藏