文章目录
二进制的算术运算
(1)无符号的二进制算术运算
(Ⅰ)无符号二进制运算的进位、借位规则
无符号的二进制算术运算比较简单,唯一与十进制运算不同的是:
十进制是满10则进一位,如:9+1=10(本位为0,进位为1)。二进制则是满2进一位,如:1+1=10(本位为0,进位为1)。
同样,十进制向高位借一位,相当于本位加10,高位减1。如:11-9,本位1-9不够减需要借位,变成1+10-9=2,高位则是1-1=0,所以11-9=2。而二进制向高位借一位则相当于本位加2,高位减1。如10-01,本位0-1不够减需要借位,变成0+2-1=1,高位则是1-1=0,所以10-01=01。
(Ⅱ)例子
(2)有符号的二进制算术运算
(Ⅰ)原码、反码、补码
快速求出反码和补码的方式
(Ⅱ)带符号二进制数的减法运算
当两个带符号二进制数做减法的时候,会遇到非常麻烦的事情:
要先判断两个数绝对值的大小,再用绝对值大的数减去绝对值小的数,最后还要根据大减小还是小减大来判断算出的值的符号是正还是负,过于麻烦。所以在计算带符号二进制的减法的时候,我们会通过更为简单的补码加法来实现带符号二进制的减法
例子1(结果为正数的情况)
0011为正数,正数的原码等于它的补码,则最终结果就为0011(十进制为3)。
例子2(结果为负数的情况)
1101为负数,要求它的原码,先把补码-1变成反码,再逐位求反得到原码。
关于自动丢弃的说明:
减法运算算出的结果肯定是小于被减数的(这边默认减的是正数),所以其结果的位数一定不会大于被减数的位数,如例题中的10011为五位,而被减数0101只有四位,所以10011最高位的那个1要自动丢弃
(Ⅲ)带符号二进制数的加法运算的溢出
符号相反的数相加不会溢出,但是两个符号相同的数相加可能会产生溢出(正数加正数、负数加负数)
更快的判断溢出的方法:
1.先看两个加数的符号是否相同
2.再看计算出来的结果的符号是否和两个加数的符号相同
如:(a)中的结果0111是正数,两个加数0100,0011也是正数,计算结果和加数的符号相同,则没有溢出
(b)中1000为负数,加数1011和1101为负数,符号相同,没有溢出
(c)中1000为负数,而0010和0110为正数,计算结果和加数符号不同,则溢出了,要在最高位补一个0(加数为正数就补0,加数为负数就补1)
(d)中0111为正数,而1101和1010为负数,符号不同,则溢出了,要在最高位补一个1