【发布时间】: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 编译器。 x 是 uint32_t。
【问题讨论】:
-
x = x - (x & 1)也许? -
x = (x >> 1) << 1;你可以使用移位,但编译器可能会优化乘法和除法。 -
你也可以使用
x &= ~1,它应该通过一个常量编译成一个AND。 -
你可以选择
(x & 0xFFFFFFFE),但我不得不怀疑这真的是你程序的瓶颈吗?这种femto优化是你时间的最佳利用吗?
标签: c++ optimization micro-optimization