我有一些基本的疑问,但每次我坐下来尝试面试问题时,这些问题和我的疑问就会出现。
假设 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
to do A - B
。在这种情况下计算机会如何表现?
我知道任何 if-then 等条件逻辑都将在 ALU 内部的硬件中完成。计算 2 的补码等,丢弃多余的位,所有这些都将在 ALU 内部的硬件中完成。 ALU 的这个组件是什么样子的?
我们使用的全部原因2 的补码 http://en.wikipedia.org/wiki/Two%27s_complement无论数字是正数还是负数,加法都是相同的 - 没有特殊情况需要考虑,就像有1 的补码 http://en.wikipedia.org/wiki/Ones%27_complement or 有符号量值 http://en.wikipedia.org/wiki/Sign-magnitude#Sign-and-magnitude_method交涉。
所以要找到A-B
,我们可以对 B 取负并添加;也就是说,我们发现A + (-B)
,并且因为我们使用的是 2 的补码,所以我们不必担心(-B)
是正数还是负数,因为无论哪种方式,加法算法的工作原理都是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)