有符号二进制数的乘法

最近在阅读《深入理解计算机系统》讲到补码乘法,书上给了一个例子是三位无符号和补码的乘法表。其中两个负数的例子:3位二进制乘法结果一般需要6为二进制表达
带符号数
x=101=-3 和y=011=3相乘 结果为110111=-9 
如果直接算出来十进制是-9然后转换为6为二进制我也能理解,但是我很好奇他利用了什么规则得出这样的结果。
根据结果推过程我认为计算机做计算都要按照正数或者说无符号数来算,那么先把x做补码非得-x=011=3 和y相乘
___011
x__011
-------------
___011
+_011
-------------
001001
得到z=001001,然后根据x和y的符号位异或得到应该是负数,于是将结果再求补码非 -z=110111 即-9

我不知道是否的确是执行了是样的位操作规则得出的结果,各种百度Google没有搜到具体的补码运算过程。

而唯一搜到的一个这个地址给出的最后的例子,我加不出他给出的位级计算的结果(反倒用我上述的模式能得到结果但是这把我搞糊涂了)



这样理解可能会更容易一些:
首先,我们从书上了解到关键的几个知识点:
1. 对无符号和补码乘法,乘法运算的位级表示都是一样的。
2. 机器使用一种乘法指令来进行有符号和无符号整数的乘法,也就是都采用无符号乘法处理,再取低位。
3. 无符号和补码的乘法低位是相同的,书上的图也想表达的是这个意思。证明如下:

<img src="https://i-blog.csdnimg.cn/blog_migrate/9a5e76ca1b5cc6d3d2121d6199faa7f4.png" data-rawwidth="470" data-rawheight="80" class="origin_image zh-lightbox-thumb" width="470" data-original="https://pic2.zhimg.com/fc4120501bf24acfd93509ad64d2609d_r.png">

对于题主的问题,拿书上的例子来说,计算过程如下:
<img src="https://i-blog.csdnimg.cn/blog_migrate/7dca0a437af2f12a3e816ee29c2d5f2b.png" data-rawwidth="952" data-rawheight="504" class="origin_image zh-lightbox-thumb" width="952" data-original="https://pic2.zhimg.com/f0dc88ecdcc1e444ea0918f3db7183f5_r.png">建议仔细理解一下上述几个知识点及证明过程,然后做一下后面的习题2.75加深理解。

  • 25
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值