按位与逻辑

Ben*_*n Y 2 c++ bit-manipulation

编辑:在C++如果我有,我需要测试8个标志.哪个在处理速度方面更有效:

在单个if语句中检查8个bool变量或者使用表示标志的char,每个标志使用1位并在单个if语句中使用单个按位运算?

如果我有1个标志要测试,那会有所作为吗?

pax*_*blo 5

如果您想要检查所有位的已知值,则比较a可能会更快:char

if (bitval == 0x82) ...
Run Code Online (Sandbox Code Playgroud)

如果你想检查某些位,忽略其他位,将"位"保存在单独的变量中可能会更快:

if ((bitval7 == 1) && (bitval1 == 1)) ...
Run Code Online (Sandbox Code Playgroud)

或者简单地掩盖你不关心的位可能会更快:

if ((bitval & 0x82) == 0x82) ...
Run Code Online (Sandbox Code Playgroud)

如果您真的担心,您可以选择以两种方式存储它们(假设您保持同步)并根据您感兴趣的位数进行选择.

但是我认为这种严重的矫枉过正是因为,说实话,速度差异很小,可能是无关紧要的.

如果您要进行优化,您几乎总能获得更好的投资回报,例如算法选择等宏观事物,而不是微分优化,例如分离布尔值或改变循环方向.

不要误解我的意思,这些微观优化可以在某些情况下发挥作用,但它们通常不是最好的方式.

  • +1不仅仅是重复"它永远不会重要,过早优化,等等等等等等".有时*它确实*有所作为,但正如你所说,通常不会. (2认同)