以下哪一种技术是整数除2的最佳选择,为什么?
技巧1:
x = x >> 1;
技巧2:
x = x / 2;
这里x是整数。
以下哪一种技术是整数除2的最佳选择,为什么?
技巧1:
x = x >> 1;
技巧2:
x = x / 2;
这里x是整数。
当前回答
Mod 2, test for = 1。不知道c中的语法,但这可能是最快的。
其他回答
X = X / 2;是合适的代码使用..但是一个操作取决于你自己的程序,你想要产生怎样的输出。
我同意其他答案,你应该支持x / 2,因为它的意图更清楚,编译器应该为你优化它。
然而,选择x / 2而不是x >> 1的另一个原因是,如果x是一个有符号int并且是负的,那么>>的行为是依赖于实现的。
ISO C99标准第6.5.7节第5项:
E1 >> E2的结果是E1位右移E2位位置。如果E1 无符号类型,或者E1有符号类型且值为非负值, 结果值为E1 /商的积分部分 2 e2。如果E1具有符号类型和负值,则结果值为 是由实现定义的。
X/Y是正确的…和" >> "移位运算符..如果我们想要二除一个整数,我们可以使用(/)被除数运算符。移位运算符用于移位位。
x = x / 2; x / = 2;我们可以这样用…
使用最能描述您要做的事情的操作。
如果你将数字作为一个比特序列来处理,请使用bitshift。 如果你把它当作一个数值,使用除法。
请注意,它们并不完全相等。对于负整数,它们可以给出不同的结果。例如:
-5 / 2 = -2
-5 >> 1 = -3
(ideone)
在性能方面。CPU的移位运算比除法运算快得多。 所以除以2或乘以2等都可以从移位运算中获益。
至于外观和感觉。作为工程师,我们什么时候变得如此依赖化妆品,连漂亮的女士都不用!:)