用整数除以2是更好的选择?
以下哪种技术是将整数除以2的最佳选择,为什么?
技术1:
x = x >> 1;
技术2:
x = x / 2;
这里x
是一个整数。
使用最能描述你正在尝试做什么的操作。
请注意,它们并不完全等效。 他们可以为负整数给出不同的结果。 例如:
-5 / 2 = -2
-5 >> 1 = -3
(ideone)
第一个看起来像分裂吗? 不可以。如果你想分割,使用x / 2
。 如果可能的话,编译器可以优化它以使用位移(这就是所谓的强度降低),如果你自己做,它就是无用的微型优化。
堆积如山:有许多理由支持使用x = x / 2;
这里有一些:
它更清楚地表达你的意图(假设你没有处理位寄存器位或其他事情)
无论如何,编译器会将其减少到移位操作
即使编译器没有减少它,并选择了比shift更慢的操作,但这最终影响程序性能的可能性本身也非常小(如果它确实影响了它,那么你就有一个实际的理由使用换班)
如果该部门将成为较大表达式的一部分,则如果使用除法运算符,则更有可能获得优先权:
x = x / 2 + 5;
x = x >> 1 + 5; // not the same as above
有符号的算术可能会比上面提到的优先级问题更复杂
重申 - 无论如何编译器已经为你做了这个。 事实上,它将把常数转换为一系列的转换,增加并乘以各种数字,而不仅仅是两个幂。 请参阅此问题以获取有关此更多信息的链接。
简而言之,如果你真的想要繁殖或分裂,你就不会购买任何东西,除非增加了引入错误的可能性。 这是一辈子的,因为编译器不够聪明,可以在适当的时候优化这种事情。
链接地址: http://www.djcxy.com/p/37197.html上一篇: Which is better option to use for dividing an integer number by 2?