![大学计算机基础(文科)](https://wfqqreader-1252317822.image.myqcloud.com/cover/337/26179337/b_26179337.jpg)
3.2.3 带符号数的表示
机器数在计算时,若将符号位和数值一起运算将会产生错误的结果。
例如,-3+2的结果应为-1,但-3+2的机器数运算结果为-5。
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00047001.jpg?sign=1739326702-QlDCzoYxVxdcnFXmsGvPwC3JkiLyIX50-0-369fe30785330053d940d6127b6df5e8)
为解决此类问题,在机器数中,负数有原码、反码和补码3种表示方法。其主要目的是解决减法运算问题。任何带符号正数的原码、反码和补码的形式完全相同,带符号负数则各有不同的表示形式。
1.原码
正数的符号位用0表示,负数的符号位用1表示,数值部分用二进制形式表示,这种表示法称为原码表示法。原码与机器数相同。
例如,用8位二进制数表示十进制整数+5和-5时,其原码分别为:
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00047002.jpg?sign=1739326702-UGSPOorUntuiQ3hkwPzrzdD0dcMkRdPN-0-14d1f9b7775a2d1e761d61a37fd479aa)
下面将考虑一个特例,即+0和-0的原码形式。
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00047003.jpg?sign=1739326702-8Hvlaj1OW000Y9fqxzbTRsPtzR8Ib1xq-0-76fc4c2aebd4ba82386a8969c3bc449f)
由此可见,+0和-0的原码形式不一致,但是从人们的常规意识和运算角度而言,+0和-0的数值、表示形式和存储形式应该是一致的。这种不一致性在计算机处理过程中可能会带来不便,因此数在计算机中通常不采用原码表示形式。
2.反码
正数的反码和原码相同,负数的反码是对该数的原码除符号位外各位按位取反。
例如,用8位二进制数表示十进制整数+5和-5时,其反码分别为:
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00047004.jpg?sign=1739326702-vrpbrum4cgNc14jkPebZR9dwv9WxHLf0-0-d71c1ba7855478aa0206909ccb9801c5)
下面将考虑一个特例,即+0和-0的反码形式。
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00047005.jpg?sign=1739326702-c19Ssk5P03GZABcaD2tlddKaubxHkQB1-0-cc1bf57acb7cc3925566f27933098d05)
由此可见,+0和-0的反码形式也出现了不一致。同样,这种不一致性在计算机处理过程中可能会带来不便。因此,数在计算机中通常也不采用反码表示形式。
3.补码
在普通的钟表上,18时和6时表针所指的位置是相同的,因为它们对于12具有相同的余数,简称同余。补码是根据同余的概念引入的,对于二进制而言,正数的补码和原码相同,负数的补码是其反码加1。
例如,用8位二进制数表示十进制整数+5和-5时,其补码分别为:
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00048001.jpg?sign=1739326702-50JNQAcDzoMFVFynhR7zHiXNVdJE3LSS-0-c754fbb306a2726abe39f0fb8bfedeb6)
下面将考虑一个特例,即+0和-0的补码形式。
![](https://epubservercos.yuewen.com/006F4C/14615887205734806/epubprivate/OEBPS/Images/img00048002.jpg?sign=1739326702-yWwl6q41YBM0mWoaLIIqq33m1vtYFtvU-0-3b0322c3e6d410811336da90cc2d35a9)
由此可见,+0和-0的补码形式具有一致性,这既符合人们的常规意识和运算规则,同时对计算机处理而言具有很大的方便性,因此在计算机中的数通常采用补码形式进行存储和运算。