int aNumber;

aNumber = aValue / 2;
aNumber = aValue >> 1;

aNumber = aValue * 2;
aNumber = aValue << 1;

aNumber = aValue / 4;
aNumber = aValue >> 2;

aNumber = aValue * 8;
aNumber = aValue << 3;

// etc.

什么是“最佳”操作方式?什么时候使用位移更好?

最佳答案

如果您使用的是正整数,则在您给出的示例中这两个函数在功能上是等效的(最后一个示例除外,应该读取aValue * 8 == aValue << 3)。仅当乘以2或乘以2的乘方时,这才是

移位永远不会比算术慢。根据您的编译器的不同,算术版本可能会编译为位移版本,在这种情况下,它们都一样有效。否则,移位应该比算术快得多。

但是,算术版本通常更具可读性。因此,我几乎在所有情况下都使用算术版本,并且仅在分析显示该语句处于瓶颈时才使用位移。

10-04 17:21