哪个是整数除以 2 的更好选择?

新手上路,请多包涵

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

技术1:

 x = x >> 1;

技术2:

 x = x / 2;

这里 x 是一个整数。

原文由 Abhineet 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

使用最能描述您正在尝试执行的操作的操作。

  • 如果您将数字视为位序列,请使用 bitshift。
  • 如果您将其视为数值,请使用除法。

请注意,它们并不完全相同。对于负整数,它们可以给出不同的结果。例如:

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

(想法)

原文由 Mark Byers 发布,翻译遵循 CC BY-SA 3.0 许可协议

显然,如果您正在为下一个阅读它的人编写代码,请确保“x/2”的清晰性。

但是,如果速度是您的目标,请尝试两种方式并计算结果的时间。 几个月前,我研究了一个位图卷积例程,其中涉及遍历整数数组并将每个元素除以 2。我做了各种优化它,包括用“x>>1”替换“x”的老技巧/2”。

当我实际上对两种方式进行计时时,我惊讶地发现 x/2 比 x>>1 快

这是使用 Microsoft VS2008 C++ 并打开默认优化。

原文由 Chris Bennet 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题