2.2.3 二进制整数的加法运算规则
二进制整数的加法,满足“逢二进一”的规则。首先,考虑一位二进制数相加的情况,即0+0=0、1+0=1、0+1=1、1+1=10。很明显,由于1+1=2,按照二进制加法运算规则需要逢二进一,因此就变成10。
【例2-1】两个无符号整数98和109相加,假设8位字长。
(1)得到无符号整数98所对应的二进制数序列为“01100010”。
(2)得到无符号整数109所对应的二进制数序列为“01101101”。
(3)使用二进制数加法规则,执行两个二进制数序列的相加操作:
(4)相加的结果为二进制数序列“11001111”,其对应的无符号整数为207,与两个无符号整数98和109的十进制数加法得到的结果一致。
【例2-2】两个无符号整数123和140相加,假设8位字长。
(1)得到无符号整数123所对应的二进制数序列为“01111011”。
(2)得到无符号整数140所对应的二进制数序列为“10001100”。
(3)使用二进制数加法规则,执行两个二进制数序列的相加操作:
(4)相加的结果为二进制数序列“100000111”,其对应的无符号整数为263,与两个无符号整数123和140的十进制数加法得到的结果一致。
注:当计算机的字长为8位时,将第9位称为进位标志。通常,将进位标志保存在一个特殊的寄存器中,用于指示在相加的过程中向最高位产生了进位。
【例2-3】两个有符号数+98和+109相加,假设8位字长。
该例子前三步和【例2-1】完全相同,得到相加后的二进制序列为“11001111”,由于是有符号数相加,因此将该序列理解为二进制补码,其对应的整数为-49。很明显,相加的两个数为正整数,而相加的结果却成为负整数。这在计算机中称为溢出,这是由于数的表示范围的限制所导致的。在计算机中,通常也将该标志保存到一个特殊的寄存器中。在计算机中,溢出是一个比较严重的错误,需要进行相应的处理。
注:两个正整数相加,或者两个负整数相加,都可能产生“溢出”。当产生溢出时,两个正整数相加的结果为负整数,两个负整数相加的结果为正整数。
【例2-4】两个有符号数-35和-87相加,假设8位字长。
(1)得到有符号整数-35所对应的二进制补码形式的序列为“11011101”。
(2)得到有符号整数-87所对应的二进制补码形式的序列为“10101001”。
(3)使用二进制数加法规则,执行两个二进制数序列的相加操作:
(4)相加结果的二进制数序列为“110000110”,第9位为进位标志(值为1),由于字长为8位,因此只考虑8位二进制序列“10000110”,该二进制序列理解为有符号数的补码形式,其对应的整数为-122,与两个负整数的十进制加法的结果完全相同。
这里需要强调,无符号整数实际上对应于整数中的正整数,也就是不考虑符号位;有符号数对应于整数(包括负整数,零和正整数),需要考虑符号位。
思考与练习2-9:对于两个8位二进制数序列“10000001”和“00101111”来说:
(1)当计算机将这两个二进制序列理解为无符号数时,等效的十进制正整数分别表示为______和________;将这两个二进制数相加时,得到的运算结果使用二进制数表示为________,等效的十进制正整数表示为________(给出具体的相加过程,以验证加法过程的正确性)。
(2)当计算机将这两个二进制数序列理解为有符号数时,等效的十进制整数分别表示为________和__________;将这两个二进制数相加时,得到的运算结果使用二进制数表示为________,等效的十进制整数表示为__________(给出具体的相加过程,以验证加法过程的正确性)。
(3)当这两个8位二进制序列作为无符号数扩展为16位等效的二进制序列时,结果分别表示为________和________。当这两个8位二进制序列作为有符号数扩展为16位等效的二进制序列时,结果分别表示为________和________。