|
数的表示方法有原码、反码和补码,反码是原码到补码的过度。补码和原码的关系是取反加1。在编制从原码到补码的转换程序时,要注意两个问题:
1:正数原码就是补码,不用取反加1,判断到正数就立即退出,不做操作。
2:负数的补码当然就是取反加1,但是这里又要注意两点:
(1)取反加1时符号位不要参与进去,符号位还是要置位1;
(2)一定要判断原码是不是-0,如果是-0则直接返回0(n个二进制数0)。这一点往往是容易被忽略的。
注意:如果忽略了第二小点,则原码 -0(10000000........)经取反加一后还是10000000........,这是补码中负数绝对值的最大数而不是0。如字节补码为 -128,字补码为 -32768,所以结果就错了。
由于原码有+0和-0之分,其真值都是“0”,即0占用了两种表示的代码;所以表达的数的范围比补码少了一个。而补码只有+0,数的表示范围比原码多了一个。即补码负数绝对值的最大数比原码负数绝对值的最大数大1。
|
|