我写了这个简单的帮助程序 constexpr
功能。
#include <cstdint>
constexpr bool isEven(uint32_t value) { return ((value%2) == 0); }
很直接 我想知道这是否被认为是确定某个整数值是奇数还是偶数的最有效方法?我现在并不担心为不同的积分类型模板化这个函数。我只是在考虑到可移植性的同时,寻求效率和性能。
编辑
为了说明一些情况,我可能会在一个循环中调用这个函数,这个循环可能会迭代100,000次到100,000,000次或更多......。所以效率是关键,但可移植性仍然是一个因素......
我曾想过像其他人在评论或答案中所说的那样,通过检查最不重要的位来进行 "位智操作",但是,我不确定编译器是否会在这种情况下优化modulo操作符。
关于可移植性,我不确定 "endian "还是 "integral conventions "是否会成为使用哪种实现的主导因素。考虑到一个只实现1的补码而不是2的补码的系统,或者一个使用Big Endian而不是Little的系统可能需要被考虑在内。
你可以直接使用 &
( AND )运算符。
如果 x
是你 int
:
x & 1 // returns 1 if odd, else 0
这可能是寻找一个整数是奇数还是偶数的最好方法。