【发布时间】:2013-03-18 02:47:50
【问题描述】:
我今天看到了这段摘录:
在大多数较旧的微处理器上,按位运算比加法和加法稍快 减法运算,通常比乘法和除法快得多 操作。在现代架构中,情况并非如此:按位运算通常是 与加法相同的速度(尽管仍比乘法快)。
我很好奇为什么按位运算比旧微处理器上的加法/减法运算稍快。
我能想到的会导致延迟的是,实现加法/减法的电路依赖于几个级别的逻辑门(并行加法器等),而按位运算的电路实现要简单得多。是这个原因吗?
我知道算术和按位运算在现代处理器上都在一个时钟周期内执行,但纯粹谈谈电路的传播时间,理论上现代处理器中的延迟是否仍然存在?
最后,我有一个关于按位移位操作执行的概念性 C 问题:
unsigned x = 1;
x <<= 5;
unsigned y = 0;
y += 32;
x 和 y 都应该保持值 32,但是是否需要 5 单独的左移才能使 x 达到该值(如通过管道)?为了澄清,我纯粹是在询问电路行为而不是时钟周期数。
【问题讨论】:
-
你的第一个例子给出了零,但这可能是一个错字。您剩下的问题是特定于硬件的,可能与这里无关。
-
@500 我认为了解处理器的工作原理很重要,这样您就可以更好地了解高级代码的运行方式。
-
@kjprice:很公平 - 你会注意到我没有投票结束。
-
@500-InternalServerError 感谢您的提醒,我调整了代码,使其正确。 :)
-
在旧 CPU 上可能更快的按位运算将是 AND / OR / XOR,而不是移位超过 1。可以为任意移位计数执行 1 个周期移位的桶形移位器比先行进位加法器更昂贵。 (例如,看看 Pentium4:缓慢的转变,但
add和xor一样快。agner.org/optimize/.)不过 Shift-by-1 是一个合理的例子;许多简单的 CPU 只支持移位 1,或者每次计数需要 1 个周期。
标签: c bit-manipulation bitwise-operators cpu-architecture digital-logic