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上找到这里


» 下一篇: 程序化创建JAR文件