使用现代 C++ 技术确定整数是奇数还是偶数的最有效方法
Most efficient way to determine if an integer is odd or even using modern C++ techniques
我写了这个简单的助手 constexpr
函数:
#include <cstdint>
constexpr bool isEven(uint32_t value) { return ((value%2) == 0); }
这很简单。我想知道这是否被认为是确定某个整数值是奇数还是偶数的最有效方法?目前,我并不担心为不同的整数类型制作此函数的模板。我只是在寻找效率和性能,同时牢记便携性。
编辑
为了提供一些上下文,我可能会在一个可以迭代 100,000 次到 100,000,000 次或更多次的循环中调用此函数...所以效率在这里很关键,但可移植性仍然是一个因素...
我曾考虑过 "bitwise operations" 通过检查其他人在他们的评论或答案中所说的最低位最高有效位,但是,我不确定编译器是否会在这种情况下优化模运算符。
关于可移植性,我不确定 "endian" 或 "integral conventions" 是否是应该使用实现的主要因素。考虑到只实现 1 的补码而不是 2 的补码的系统,或者使用 Big Endian 而不是 Little 的系统可能需要考虑。
您可以直接使用 &
( AND ) 运算符。
如果 x
是你的 int
:
x & 1 // returns 1 if odd, else 0
这可能是判断整数是奇数还是偶数的最佳方法。
我写了这个简单的助手 constexpr
函数:
#include <cstdint>
constexpr bool isEven(uint32_t value) { return ((value%2) == 0); }
这很简单。我想知道这是否被认为是确定某个整数值是奇数还是偶数的最有效方法?目前,我并不担心为不同的整数类型制作此函数的模板。我只是在寻找效率和性能,同时牢记便携性。
编辑
为了提供一些上下文,我可能会在一个可以迭代 100,000 次到 100,000,000 次或更多次的循环中调用此函数...所以效率在这里很关键,但可移植性仍然是一个因素...
我曾考虑过 "bitwise operations" 通过检查其他人在他们的评论或答案中所说的最低位最高有效位,但是,我不确定编译器是否会在这种情况下优化模运算符。
关于可移植性,我不确定 "endian" 或 "integral conventions" 是否是应该使用实现的主要因素。考虑到只实现 1 的补码而不是 2 的补码的系统,或者使用 Big Endian 而不是 Little 的系统可能需要考虑。
您可以直接使用 &
( AND ) 运算符。
如果 x
是你的 int
:
x & 1 // returns 1 if odd, else 0
这可能是判断整数是奇数还是偶数的最佳方法。