为什么二进制补码乘法需要进行符号扩展?

计算机系统程序员的观点(2.3.5)一书中,计算二进制补码乘法的方法描述如下:

  

C中的符号乘法通常通过将2w位乘积截断为w位来执行。   将二进制补码数截断为w位等效于首先计算其值取2 w 为模,然后从无符号转换为二进制补码。

因此,对于相似的位级操作数,为什么无符号乘法与二进制补码乘法不同?为什么二进制补码乘法需要进行符号扩展?

要计算无符号和二进制补码的相同位表示,我们可以转换二进制补码的参数,然后执行无符号加法,最后转换回二进制补码。

由于乘法包含多个加法运算,为什么无符号乘法和二进制补码乘法的完整表示形式不同?

yuelao0308 回答:为什么二进制补码乘法需要进行符号扩展?

图2.27演示了以下示例:

+------------------+----------+---------+-------------+-----------------+
|       Mode       |    x     |    y    |    x · y    | Truncated x · y |
+------------------+----------+---------+-------------+-----------------+
| Unsigned         |  5 [101] | 3 [011] | 15 [001111] |  7 [111]        |
| Two's complement | –3 [101] | 3 [011] | –9 [110111] | –1 [111]        |
+------------------+----------+---------+-------------+-----------------+

如果将101乘以011,将得到1111(等于001111)。那么,他们是如何得到110111的二进制补码呢?

这里的要点是要获得正确的6位二进制补码乘积,您需要乘以6位二进制补码。因此,您需要首先将-3和3和3转换为6位的二进制补码表示形式:-3 = 111101,3 = 000011,然后再将它们相乘111101 * 000011 =10110111。还需要将结果截断为6位以最终从上表中获得110111。

本文链接:https://www.f2er.com/3050689.html

大家都在问