我有一些基本的疑问,但是每次我坐下来尝试面试问题时,这些问题和我的疑问就会冒出来。
假设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-complement或signed-magnitude表示形式。
因此,要找到A-B
,我们可以取反B并添加;也就是说,我们找到了A + (-B)
,并且因为我们使用的是2的补码,所以我们不必担心(-B)
是正数还是负数,因为加法算法的工作方式相同。