问题:下述方法判断一个整数是否可行
public static boolean isOdd(int i){
return i%2==1;
}
解惑:
当i为一个非负整数时,这种方法是可取的,但是当i为一个负整数时,该方法就会出错了。
原因是i%2的运算,假如结果是非0的,那么结果的符号与i的符号是一样的,即i为负,则结果为负,i为正,则结果为正。所以对于负奇数上述方法是判断错误的。
为了更清晰的说明问题,有如下代码和结果:
System.out.println(3%2); //结果为1
System.out.println(-3%2); //结果为-1
继续
System.out.println(isOdd(3)); //结果为true
System.out.println(isOdd(-3)); //结果为false
正确的解决方案是:
public static boolean isOdd(int i){
return i%2!=0;
}
任何奇数(正奇数或者负奇数)模2运算都是不等于0的,但是偶数模2运算是等于0的,从而达到了判断的目的。
为了使性能更优,可变换如下:
return (i&1)!=0;
逻辑操作与取余操作速度相对快些。