使用现代 C++ 技术确定整数是奇数还是偶数的最有效方法

Fra*_*ler 0 c++ performance constexpr c++17

我写了这个简单的辅助constexpr函数:

#include <cstdint>

constexpr bool isEven(uint32_t value) { return ((value%2) == 0); }
Run Code Online (Sandbox Code Playgroud)

这非常简单。我想知道这是否被认为是确定某个整数值是奇数还是偶数的最有效方法?目前我并不担心为不同的积分类型模板化这个函数。我只是在追求效率和性能,同时牢记便携性。

编辑

为了提供一些上下文,我可能会在一个循环中调用这个函数,该循环可以迭代 100,000 次到 100,000,000 次或更多...所以效率是这里的关键,但可移植性仍然是一个因素...

正如其他人在评论或答案中所述,我曾通过检查最低有效位来考虑“按位运算”,但是,我不确定编译器是否会在这种情况下优化模运算符。

关于可移植性,我不确定“字节序”或“整体约定”是否是应该使用实现的主要因素。考虑一个仅实现 1 的补码而不是 2 的补码的系统,或者使用 Big Endian 而不是 Little 的系统,可能需要加以考虑。

Abh*_*ate 6

您可以直接使用&( AND ) 运算符。

如果x是你的int

x & 1  // returns 1 if odd, else 0
Run Code Online (Sandbox Code Playgroud)

这可能是查找整数是奇数还是偶数的最佳方法。

  • 补充一下,x &amp; 1 在补码系统上会给出错误的答案。如果您需要可移植性,那么您最好使用 modulo( % 运算符 ),因为使用 &amp; 运算符获得的效率或优化无论如何都是微不足道的。 (6认同)
  • @FrancisCugler您可以放心, &amp; 是查找整数(奇数或偶数)奇偶校验的成本最低且最有效的操作 (2认同)
  • @FrancisCugler 是的,可能他们会根据相同的指令进行优化,但可以肯定的是,你无法击败这个。 (2认同)