当前位置: 首页 > 知识库问答 >
问题:

为什么两个补乘法需要进行符号扩展?

雷曜灿
2023-03-14

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

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

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

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

既然乘法由多个加法组成,为什么无符号乘法和二的补码乘法的完整表示不同?

共有1个答案

徐卓
2023-03-14

图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位2的补码积,需要将6位2的补码数相乘。因此,您需要首先将-3和3转换为6位2的补码表示法:-3=111101,3=000011,然后将它们相乘111101*000011=10110111。您还需要将结果截断为6位,最终从上表中获得110111。

 类似资料:
  • 问题内容: 我的问题就像标题说的那样:为什么我们需要9个补丁的图像?他们真的那么重要吗?其实,他们真正在做什么?我没有清楚地了解9色块图像的概念。 我知道9补丁图像是可伸缩的。因此,假设我有一些完全适合我的ldpi设备的图像按钮。使用Draw 9-patch工具(android SDK的一部分),我可以标记可缩放区域,并且该图像非常适合hdpi甚至xhdpi设备。边缘会很光滑。 但这真的是很好的实

  • 我正在尝试创建一个霍夫曼树,我看到的问题对我来说很奇怪,它如下: 给定以下数据结构: 编写一个程序,该程序将二进制文件的名称作为唯一参数,构建该文件的霍夫曼树,假设原子(基本符号)是8位无符号字符,并打印树和字典。 分配必须使用 malloc() 以外的任何东西来完成,排序可以使用 qsort() 来完成。 这里让我感到困惑的是,要编写一个程序来创建霍夫曼树,我们只需要做以下事情: 我们需要取一个

  • null 我理解Mono是一个由0或1个元素组成的流和Flux是一个由0或N个元素组成的流之间的区别。 既然Mono和Flush都在实现,为什么我们需要这两种类型,为什么不对所有内容都使用Flux呢?

  • 在阅读有关磁力计/磁场/“罗盘”传感器的内容时,人们常说,为了获得正确的测量结果,需要使用加速度计等进行传感器倾斜补偿。(注意我这里说的不是硬铁和软铁效果。)所有这些源都利用二维罗盘来进行澄清,当罗盘倾斜时,就不起作用了。 当使用3D磁强计(例如HMC5883L)时,我的理解是,它们提供了一个指向(或沿着)最强磁场方向的3D矢量,在地球上,磁场应该朝向磁北。 我的印象是,我可以使用由加速度计测量的

  • 问题内容: 我试图解析一个文件,该文件的每一行都用管道定界值。当我没有在split方法中转义管道定界符时,它不能正常工作,但是在我如下转义管道后,它却可以正常工作。 有人可以解释为什么该方法需要转义管道字符吗? 问题答案: 需要一个正则表达式参数。未转义的被解析为正则表达式,表示“空字符串或空字符串”,这不是您的意思。