1. 概述
我们都知道,一个数的奇偶性是由它除以2的余数决定的。偶数除以2的余数是0,而奇数的余数是1。
在这个教程中,我们将探讨多种在Java中检查一个数是否为偶数或奇数的方法。
2. 除法方法
用于返回除法余数的算术运算符是取模(modulus)操作符 %
。
最简单的方法是将数字除以2并检查余数:
boolean isEven(int x) {
return x % 2 == 0;
}
boolean isOdd(int x) {
return x % 2 != 0;
}
让我们编写一些测试用例来验证我们的方法行为:
assertEquals(true, isEven(2));
assertEquals(true, isOdd(3));
3. 位操作方法
我们可以对数字执行多种位操作来确定其奇偶性。
位操作通常比其他方法更高效,用于判断一个数的奇偶性。
3.1. 位或(|)
一个偶数与1进行位或操作总是会增加1。
而一个奇数与1进行位或操作始终会得到相同的数值:
boolean isOrEven(int x) {
return (x | 1) > x;
}
boolean isOrOdd(int x) {
return (x | 1) == x;
}
让我们通过一些测试来看看代码的行为:
assertEquals(true, isOrEven(4));
assertEquals(true, isOrOdd(5));
3.2. 位与(&)
一个偶数与1进行位与操作总是得到0。相反,一个奇数与1进行位与操作总是得到1:
boolean isAndEven(int x) {
return (x & 1) == 0;
}
boolean isAndOdd(int x) {
return (x & 1) == 1;
}
我们将通过一个小测试来确认这一行为:
assertEquals(true, isAndEven(6));
assertEquals(true, isAndOdd(7));
3.3. 位异或(^)
位异或是检查数的奇偶性的最优解决方案。
一个偶数与1进行位异或操作总是增加1,而一个奇数与1进行位异或操作总是减少1:
boolean isXorEven(int x) {
return (x ^ 1) > x;
}
boolean isXorOdd(int x) {
return (x ^ 1) < x;
}
让我们编写一些小测试来检验我们的代码:
assertEquals(true, isXorEven(8));
assertEquals(true, isXorOdd(9));
4. 最低位(Least Significant Bit, LSB)
我们介绍的最后一个方法是读取数字的最低位。
偶数的最低位始终是0,而奇数的最低位始终是1:
boolean isLsbEven(int x) {
return Integer.toBinaryString(x).endsWith("0");
}
boolean isLsbOdd(int x) {
return Integer.toBinaryString(x).endsWith("1");
}
我们将用几行代码来演示这个行为:
assertEquals(true, isLsbEven(10));
assertEquals(true, isLsbOdd(11));
5. 总结
在这篇文章中,我们学习了多种检查一个数奇偶性的方法。我们发现,检查奇偶性的最优方案是位异或操作。
如往常一样,示例代码可以在GitHub上找到这里。