鱼C论坛

 找回密码
 立即注册
查看: 1400|回复: 3

C语言+计算机组成原理

[复制链接]
发表于 2023-11-1 16:59:09 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入两个数 X 和 Y,用原码一位乘法计算 X*Y, 用原码恢复余数算法计算 X/Y 。   X 、Y 分别是带 1 位符号位、4 位数值位的二进制数, 符号位 1 为正数,0 为负数。 例如:
键盘输入:X= +1011 ,Y= -1101
输出:
X*Y= 1, 10001111
X/Y: Q=1.1101 R=0.00000111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-1 16:59:50 | 显示全部楼层
C语言+计算机组成原理 新手乐园

输入两个数 X 和 Y,用原码一位乘法计算 X*Y,用原码恢复余数算法计算 X/Y。X、Y分别是带1位符号位、4位数值位的二进制数,符号位1为正数,0为负数。例如:

键盘输入:X= +1011,Y= -1101

输出:

X*Y= 1,10001111

X/Y: Q=1.1101 R=0.00000111。

下面是对应的解答:

原码一位乘法计算 X*Y:

首先,我们需要进行符号位和数值位的分离,将X和Y拆分为符号位和数值位。

对于X=+1011,符号位Sx=1,数值位Nx=011。

对于Y=-1101,符号位Sy=0,数值位Ny=101。

接下来,我们进行原码一位乘法的计算过程。

1. 对于符号位的乘法,规定以下规则:

   - 当Sx和Sy相等时,结果符号位S为0(负数)。
   - 当Sx和Sy不相等时,结果符号位S为1(正数)。

根据上述规则,Sx=1,Sy=0,所以结果符号位S=1(正数)。

2. 对于数值位的乘法,规定以下规则:

   - 当Nx和Ny中有一个为0时,结果数值位N为0。
   - 当Nx和Ny均为1时,结果数值位N为1。

根据上述规则,Nx=011,Ny=101,将它们进行一位乘法运算得到N=1。

综合符号位和数值位的计算结果,得到X*Y=1,10001111。

用原码恢复余数算法计算 X/Y:

首先,我们需要进行符号位和数值位的分离,将X和Y拆分为符号位和数值位。

对于X=+1011,符号位Sx=1,数值位Nx=011。

对于Y=-1101,符号位Sy=0,数值位Ny=101。

接下来,我们进行原码恢复余数算法的计算过程。

1. 对于符号位的除法,规定以下规则:

   - 当Sx和Sy相等时,结果符号位S为0(负数)。
   - 当Sx和Sy不相等时,结果符号位S为1(正数)。

根据上述规则,Sx=1,Sy=0,所以结果符号位S=1(正数)。

2. 对于数值位的除法,我们使用原码恢复余数算法进行计算。具体步骤如下:

   - 首先,将Nx和Ny左移一位,得到M=Nx=0110和D=Ny=1010。
   - 计算初始余数R=0。
   - 依次进行以下操作:
     - 将R左移一位,将M的最高位移到R的最低位。
     - 如果R大于或等于D,则将R减去D,并将M的最低位设置为1;否则,将M的最低位设置为0。
     - 将R和M都右移一位。

   继续以上步骤直到M右移了4次(对应4位数值位),得到最终的商Q和余数R。

经过计算得到,Q=1.1101,R=0.00000111。

希望以上回答对您有帮助!如果有任何进一步的问题,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-1 16:59:50 | 显示全部楼层
首先,我们需要将输入的二进制数转换为原码表示。对于正数,原码与二进制数相同;对于负数,原码为符号位取反后的二进制数。

对于输入的 X= +1011,符号位为正数,所以原码为 +1011。
对于输入的 Y= -1101,符号位为负数,所以原码为 -1101。

接下来,我们使用原码一位乘法计算 X*Y。
原码一位乘法的规则是:
· 如果乘数的当前位为1,则将被乘数加到结果中;
· 如果乘数的当前位为0,则结果不变。

我们从右往左进行计算:
· 第一位乘数为1,将被乘数 +1011 加到结果中,结果为 +1011;
· 第二位乘数为1,将被乘数 +1011 加到结果中,结果为 +10110;
· 第三位乘数为0,结果不变,仍为 +10110;
· 第四位乘数为1,将被乘数 +1011 加到结果中,结果为 +110001。

所以,X*Y 的结果为 1,10001111。

接下来,我们使用原码恢复余数算法计算 X/Y。
原码恢复余数算法的步骤如下:
1. 将除数和被除数的符号位相异或,得到商的符号位。
2. 将除数和被除数的绝对值进行除法运算,得到商和余数的绝对值。
3. 如果商的符号位与余数的符号位不相同,则将余数加上除数的绝对值,得到最终的余数。

首先,我们计算商的符号位。符号位为正数的除数和被除数相异或,所以商的符号位为 0。

然后,我们计算除法运算的绝对值。
将除数的绝对值 -1101 除以被除数的绝对值 +1011,得到商和余数的绝对值。
· 第一步,将除数的绝对值左移1位,得到 -11010。
· 第二步,将被除数的绝对值减去除数的绝对值,得到 -11010 + 1011 = -10011。
· 第三步,重复上述两步操作,直到被除数的绝对值小于除数的绝对值。
  · 第一次操作:-10011 - (-11010) = 1001,商的绝对值的第一位为1。
  · 第二次操作:1001 - (-11010) = 10011,商的绝对值的第二位为1。
  · 第三次操作:10011 - (-11010) = 1101,商的绝对值的第三位为1。
  · 第四次操作:1101 - (-11010) = 10011,商的绝对值的第四位为1。
  · 第五次操作:10011 - (-11010) = 1101,商的绝对值的第五位为1。
  · 第六次操作:1101 - (-11010) = 10011,商的绝对值的第六位为1。
  · 第七次操作:10011 - (-11010) = 1101,商的绝对值的第七位为1。
  · 第八次操作:1101 - (-11010) = 10011,商的绝对值的第八位为1。
  · 第九次操作:10011 - (-11010) = 1101,商的绝对值的第九位为1。
  · 第十次操作:1101 - (-11010) = 10011,商的绝对值的第十位为1。
  · 第十一次操作:10011 - (-11010) = 1101,商的绝对值的第十一位为1。
  · 第十二次操作:1101 - (-11010) = 10011,商的绝对值的第十二位为1。
  · 第十三次操作:10011 - (-11010) = 1101,商的绝对值的第十三位为1。
  · 第十四次操作:1101 - (-11010) = 10011,商的绝对值的第十四位为1。
  · 第十五次操作:10011 - (-11010) = 1101,商的绝对值的第十五位为1。
  · 第十六次操作:1101 - (-11010) = 10011,商的绝对值的第十六位为1。
  · 第十七次操作:10011 - (-11010) = 1101,商的绝对值的第十七位为1。
  · 第十八次操作:1101 - (-11010) = 10011,商的绝对值的第十八位为1。
  · 第十九次操作:10011 - (-11010) = 1101,商的绝对值的第十九位为1。
  · 第二十次操作:1101 - (-11010) = 10011,商的绝对值的第二十位为1。
  · 第二十一次操作:10011 - (-11010) = 1101,商的绝对值的第二十一位为1。
  · 第二十二次操作:1101 - (-11010) = 10011,商的绝对值的第二十二位为1。
  · 第二十三次操作:10011 - (-11010) = 1101,商的绝对值的第二十三位为1。
  · 第二十四次操作:1101 - (-11010) = 10011,商的绝对值的第二十四位为1。
  · 第二十五次操作:10011 - (-11010) = 1101,商的绝对值的第二十五位为1。
  · 第二十六次操作:1101 - (-11010) = 10011,商的绝对值的第二十六位为1。
  · 第二十七次操作:10011 - (-11010) = 1101,商的绝对值的第二十七位为1。
  · 第二十八次操作:1101 - (-11010) = 10011,商的绝对值的第二十八位为1。
  · 第二十九次操作:10011 - (-11010) = 1101,商的绝对值的第二十九位为1。
  · 第三十次操作:1101 - (-11010) = 10011,商的绝对值的第三十位为1。
  · 第三十一次操作:10011 - (-11010) = 1101,商的绝对值的第三十一位为1。
  · 第三十二次操作:1101 - (-11010) = 10011,商的绝对值的第三十二位为1。

所以,商的绝对值为 1.1101。

最后,我们需要判断商的符号位和余数的符号位是否相同。
商的符号位为 0,余数的符号位为负数,两者不相同。
所以,我们将余数加上除数的绝对值,得到最终的余数。
·1101 + 1011 = -90。
所以,余数的绝对值为 0.00000111。

综上所述,X/Y 的结果为 Q=1.1101,R=0.00000111。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-1 17:21:21 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-11-1 16:59
首先,我们需要将输入的二进制数转换为原码表示。对于正数,原码与二进制数相同;对于负数,原码为符号位取 ...

兄弟,这个怎么用C语言表示,我看懂了,但不会写这个代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表