四位有符号数的乘法运算
首先在乘法运算a*b中,a为被乘数,b为乘数。在有符号数的乘法运算中,我们需要将被乘数和乘数先转化为补码进行乘法运算。关于原码、反码、补码的关系,可以查阅数电书,这里只简单地说一下,正数的原码=反码=补码;负数的补码是原码的最高位(符号位)保持不变,其余位分别取反;负数的补码是在反码的基础上加1。两个四位有符号二进制数相乘得到的结果是八位有符号二进制数。
那么在此基础上,可以将有符号数的乘法运算分为以下四种情况:
1、a与b均为正数
假设a=+5,b=+3
直接相乘,然后用最高位补齐8位(标蓝色的为扩展的符号位),再相加。又因为正数的补码就是其本身,所以得到结果00001111,化为十进制就是+15,正确。
2、a为正数,b为负数
假设a=+5,b=-3,则a的补码为0101,b的补码为1101。
注意看标红的5个数字,本应该得到0101四位数,再按照扩展符号位的做法,得到00101五位数。但由于b的符号位为1(即b为负数),那么我们需要将得到的00101这五位数,均按位取反再加1,这样就能得到标红的11011了。
相加得到结果11110001,此时是补码,再求其原码得10001111,化为十进制为-15,正确。
3、a为负数,b为正数
假设a=-3,b=+5,则a的补码为1101,b的补码为0101。
此时,由于b为正数,并不需要像第二种情况,b为负数那样将标红的数按位取反再加1。将得到的补码结果11110001,求其原码得10001111,化为十进制为-15,正确。
4、a与b均为负数
假设a=-5,b=-3,则a的补码为1011,b的补码为1101。
相加可以得到已经溢出的结果,只取其低八位,得到00001111,正数的原码等于补码,所以化为十进制得+15,正确。