我有一些基本的疑问,但是每次我坐下来尝试面试问题时,这些问题和我的疑问就会冒出来。

假设A = 5,B = -2。假设A和B为4字节,CPU如何添加A + B

我知道A的符号位(MSB)为0表示正值
B的符号位为1表示负整数。

现在,在C++程序中,我要打印A + B,请算术逻辑单元(ALU)的加法模块首先检查符号位,然后决定进行减法,然后按照减法的步骤进行操作。如何进行减法运算将是我的下一个问题。

A = 5
B = 2

我想做A - B。计算机将采用B的2的补码,然后加上A + B的2的补码,然后返回此值(丢弃左侧多余的位后)?
A = 2
B = 5

A - B。在这种情况下,计算机如何工作?

我知道,所有的if-then等条件逻辑都将在ALU内部的硬件中完成。计算2s补码等,丢弃多余的位全部在ALU内部的硬件中完成。 ALU的此组件是什么样的?

最佳答案

我们使用2's-complement的全部原因是,无论数字是正数还是负数,加法都是相同的-无需考虑特殊情况,例如1's-complementsigned-magnitude表示形式。

因此,要找到A-B,我们可以取反B并添加;也就是说,我们找到了A + (-B),并且因为我们使用的是2的补码,所以我们不必担心(-B)是正数还是负数,因为加法算法的工作方式相同。

10-04 18:36