【问题标题】:Previous even number上一个偶数
【发布时间】:2015-12-10 17:42:02
【问题描述】:

如果一个整数是奇数(奇数),我想得到以前的数字,否则我想保留当前的数字。例如。如果x = 3,我想将2分配给x,如果x = 4,那么什么也不会发生。

目前,我执行以下操作:x = (x/2)*2,但我听说除法计算成本很高。 -O3 是否优化了这个表达式?我正在使用c++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4 编译器。 xuint32_t

【问题讨论】:

  • x = x - (x & 1) 也许?
  • x = (x >> 1) << 1; 你可以使用移位,但编译器可能会优化乘法和除法。
  • 你也可以使用x &= ~1,它应该通过一个常量编译成一个AND
  • 你可以选择(x & 0xFFFFFFFE),但我不得不怀疑这真的是你程序的瓶颈吗?这种femto优化是你时间的最佳利用吗?

标签: c++ optimization micro-optimization


【解决方案1】:

试试下面的

x &= ~1;

我假设 x 被声明为类型为int。否则,如果 x 类型的等级大于 int 类型的等级,那么您应该使用变量 x 类型的整数字面量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2015-01-29
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多