用补码一位乘法计算x×y。(写出步骤) x=0.10110,y= -0.00011。
1个回答
关注
展开全部
处理对象:被乘数补码 × 乘数补码 = 两数积的补码。
预处理:
1. 单独算出被乘数的相反数的补码,同时乘数补码往右扩一位补0(乘数补码处理值),积的符号位与其余位必须一同计算。
2. 两数补码相乘拆分为多个加法运算。
3. 每次加法运算分为高位和低位两部分处理,高位初始值为0、位数是在带符号被乘数位数基础上向左扩一位(利于右移),低位初始值是乘数补码处理值、位数与乘数数据位位数相同。
第一次加:
4. 第一次加法是由高位和加数相加,加数的值由乘数补码处理值的最低两位确定(若为01,加数为被乘数补码,若为10,加数为被乘数的相反数的补码,若这两位的数值相等,则加数为0;加数左边多余的一位根据其符号位确定补0还是补1,符号位为0则补0,符号位为1则补1)。
5. 此次加法运算结束后,加法运算所得的高位(部分积)与低位合成一个整体并右移1位得到新的高位和低位(右移时左边补0还是补1由右移前的符号位确定,符号位为0则补0,符号位为1则补1,,另外在右移时乘数补码处理值也连带着右移)。
第二次加:
6. 高位再次进行加法处理,加数的值由新得到的乘数补码处理值的最低两位确定(确定方法同第4点)。
7. 此次加法运算结束后,加法运算所得的高位(部分积)与低位合成一个整体并右移1位得到新的高位和低位(右移时高位左边补0或1的确定方法同第5点,另外在右移时乘数补码处理值也连带着右移)。
循环加法:
8. 按“第二次加”的方法循环,直至低位将乘数补码处理值的每一位都右移出去后,再进行一次加法运算(此次加法运算结束后不进行右移),此时得到的高位和低位合成一个整体就是最终乘积,这个最终乘积是双符号位。
9. 所得的最终乘积的小数位数必须是被乘数补码与乘数补码的小数位数之和。
关于双符号位:00 正,11 负,01 上溢,10 下溢。
咨询记录 · 回答于2023-12-25
用补码一位乘法计算x×y。(写出步骤) x=0.10110,y= -0.00011。
您好,这道题由我来解答,我是百度问一问合作的老师,已经在百度知道答题3年了,已经收到您的问题,我这边正在为您查询,打字需要2-5分钟,请稍等片刻,请不要结束咨询,给您整理好的答案如下:
亲,下午好,很高兴为您解答哦。
高位 低位(乘数补码处理值) 说明
00 0000 |110010 最低位10,高位加-X的补码
11 0110
————
11 0110
11 1011 01|1001 执行右移,最低位01,高位加X的补码
00 1010
————
00 0101
00 0010 10|1100 执行右移,最低位00,高位加0
00 0000
————
00 0010
00 0001 010|110 执行右移,最低位10,高位加-X的补码
11 0110
————
11 0111
11 1011 1010|11 执行右移,乘数补码被右移出去,进行最后一次运算,最低位11,高位加0
————
11 1011 1010|11
最终结果为: (B) 因为补码一位乘结果用的是双符号位,换成单符号位就是(B)
处理对象:被乘数补码 × 乘数补码 = 两数积的补码。
预处理:
1. 单独算出被乘数的相反数的补码,同时乘数补码往右扩一位补0(乘数补码处理值),积的符号位与其余位必须一同计算。
2. 两数补码相乘拆分为多个加法运算。
3. 每次加法运算分为高位和低位两部分处理,高位初始值为0、位数是在带符号被乘数位数基础上向左扩一位(利于右移),低位初始值是乘数补码处理值、位数与乘数数据位位数相同。
第一次加:
4. 第一次加法是由高位和加数相加,加数的值由乘数补码处理值的最低两位确定(若为01,加数为被乘数补码,若为10,加数为被乘数的相反数的补码,若这两位的数值相等,则加数为0;加数左边多余的一位根据其符号位确定补0还是补1,符号位为0则补0,符号位为1则补1)。
5. 此次加法运算结束后,加法运算所得的高位(部分积)与低位合成一个整体并右移1位得到新的高位和低位(右移时左边补0还是补1由右移前的符号位确定,符号位为0则补0,符号位为1则补1,,另外在右移时乘数补码处理值也连带着右移)。
第二次加:
6. 高位再次进行加法处理,加数的值由新得到的乘数补码处理值的最低两位确定(确定方法同第4点)。
7. 此次加法运算结束后,加法运算所得的高位(部分积)与低位合成一个整体并右移1位得到新的高位和低位(右移时高位左边补0或1的确定方法同第5点,另外在右移时乘数补码处理值也连带着右移)。
循环加法:
8. 按“第二次加”的方法循环,直至低位将乘数补码处理值的每一位都右移出去后,再进行一次加法运算(此次加法运算结束后不进行右移),此时得到的高位和低位合成一个整体就是最终乘积,这个最终乘积是双符号位。
9. 所得的最终乘积的小数位数必须是被乘数补码与乘数补码的小数位数之和。
关于双符号位:
00 正,11 负,01 上溢,10 下溢。
希望能够帮到您,如有做的不对的地方,您可继续咨询,多多包涵。~
我想问一下x和y的补码分别是多少呀
X的补码为0.10110,-Y的补码为1.1001(低位有4位)。
-y?
为什么那个要取-y的补码?y的补码不行吗
- y = 0.00011。
无论是原码一位乘,还是补码一位乘、补码二位乘,与手工算法都有共通之处,都是根据乘数每一位(或两位)的状态在被乘数的基础上来确定加数(如被乘数、被乘数补码、被乘数相反数补码、0),因为乘数是二进制的,每一位只有0、1两种状态,所以又免去了手算十进制乘法中以乘数每一位去乘被乘数来确定加数的过程,而右移所得的部分积就相当于手算乘法中左移加数。
怎么我把那个二进制的x y转换成十进制乘出来再转为二进制是-0.000100001
# 口诀:整数二进制用数值乘以2的幂次依次相加,小数二进制用数值乘以2的负幂次然后依次相加。
1. 整数二进制转换为十进制:首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。若二进制补足位数后首位为1时,就需要先取反再换算。
2. 小数的二进制转换为十进制:将二进制中的四位小数分别于对应的值相乘后相加得到的值即为换算后的十进制。