x = x >> 1 和 x = x / 2 两种写法哪种更佳?

鉴客 发布于 2012/06/08 19:26
阅读 666
收藏 2

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

Stackoverflow 上的一个 问题,其中 x 是整数。
加载中
1
红薯
红薯

Stackoverflow 上的最佳答案翻译如下:

这两种方法使用的场景有所不同:

  • 如果数字做为位序列的话,应该使用移位操作
  • 如果是数值那应该使用除操作

不过需要注意的是,对于负数而言这两个操作并不完全相同,例如:

-5 / 2  = -2
-5 >> 1 = -3

0
兰穆达
兰穆达
据说位移比除法快,编译器可能把除法转换成位移,我觉得还是中规中矩的/2比较明了。
0
xunxun
xunxun

现代编译器优化时都会把后者优化为前者

无优化时有的编译器也会这样做

java_speed
java_speed
说得很对!c和java就是这样!
0
evang
evang
/2的过程中,内部也是要转换成二进制然后进行位移,所以直接位移要快。
0
mahone
mahone
肯定移位。。。不过就是怕别人看不懂。。。
0
小耶果
小耶果
从可读性来说是后者,从运行效率上来说是前者.不过现代优化编译器可以让二者兼得.
0
LucEsape
LucEsape
位运算快...
0
大鱼泡泡
大鱼泡泡

现代VM已经可以自动转化了

例如31*x = x<<<5-x

0
m2012
m2012
后者更好
0
Arrowing
Arrowing

速度快了不多少

肯定选择后者,容易阅读

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部