将整数除以2,哪种选项更好?

416

以下哪种技术是将整数除以2的最佳选项,为什么?

技术1:

x = x >> 1;

技巧2:

x = x / 2;

这里的x是一个整数。


77
如果你真的想再次将结果分配给 x,那么这两种方式都不太合适:应该是 x >>= 1 或者 x /= 2,具体取决于你希望表达的操作意义。这并不是因为它更快(现代编译器会将所有等效变体编译为相同、快速的汇编代码),而是因为它更清晰易懂。 - leftaroundabout
35
我不同意leftaroundabout的观点。但是我认为值得注意的是,许多编程语言中都有一种称为"算术移位"的操作,它保留符号位并因此按预期处理带符号值。其语法可能类似于x = x >>> 1。另请注意,根据平台和编译器的不同,手动优化除法和乘法使用移位操作可能是相当合理的。举个例子,微控制器没有直接的ALU支持乘法。 - JimmyB
36
我更喜欢使用x /= 2,因为x >>= 1看起来太像单子绑定(monadic bind)了 ;) - fredoverflow
19
@leftaroundabout - 我认为写x = x / 2比写x /= 2更易读。这可能是主观偏好 :) - JimmyB
8
@HannoBinder:当然是主观的,尤其是很多习惯方面。在一个所有算术运算符都有“⬜=”组合的语言中,只要可能,应该使用这些组合。这可以消除噪音并强调“x”被修改的事实,而一般的“=”运算符则暗示它采用了完全独立于旧值的新值。避免使用组合运算符(这样数学符号的初学者也能读懂)也有其优点,但这样你将需要放弃极其实用的“++”、“--”、“+=”等运算符。 - leftaroundabout
显示剩余6条评论
22个回答

4

在性能方面,CPU的移位操作比除法操作更快。因此,除以二或乘以二等运算都可以受益于移位操作。

关于外观和感觉。作为工程师,在什么时候我们变得如此看重美观,以至于连美丽的女士们都不使用呢! :)


2

X/Y 是正确的一种方式...而 " >> " 移位运算符..如果我们想要将一个整数除以二,我们可以使用 (/) 被除数运算符。移位运算符用于移动位..

x=x/2; x/=2; 我们可以像这样使用..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接