1奇偶性
奇数可以被定义成被2整除余1的整数。于是想到用语言实现用求模取余即可:i%2==1,但是这样会不会有什么问题呢?看下面的例子:
public class IsOdd {
public static boolean isOdd(int i){
return i%2 == 1;
}
public static void main(String[] args){
System.out.println(isOdd(5));
System.out.println(isOdd(-5));
}
}
我们知道5和-5都是奇数,上面的结果会不会都是真呢,运行一下发现isOdd(5)的结果是true而isOdd(-5)的结果为false.大家想想也能明白-5%2的结果是-1,所以当一个整数是负数时永远不会得到正确的结论。
2正确判断整数的奇偶性
那么怎样判断整数的奇偶性才是正确的呢?先了解java中取余(%)操作符的定义,该操作符被定义为对于所有的int数值和所有非零的int数值b 都满足下面的恒等式:
(a/b)*b+a%b =a
这也是我们小学学习的商乘以除数加余数等与被除数,但是当与java的截尾整数整除操作符结合时,它就意味着,当取余操作返回一个非零的结果时,它与左操作符具有相同的正负号,即i为负整数事i%2返回的是-1而不是1。
到这里就可以对上面的奇偶判断函数进行改进了,代码如下:
public static boolean isOdd(int i){
return i%2 !=0;
}
如果在性能临界的环境中使用用位操作符AND(&)将会更好。
public static boolean isOdd(int i){
return (i&1)!=0;
}
因此无论何时使用%操作符是应考虑操作数和结果的符号。(本文是本人学习《java解惑的学习笔记》想了解的可以参照)