我们常规的判断是否为奇数的方法一般是:
public static boolean judge(int i){ return i%2==1;}
这粗看是正确的,因为奇数可以定义为被2整除,玉余数为1,但是在真正运行的时候却并不是这样的,我们往往忽略了负数,所有负数的判断都会被确定为 false,无论这个负数是偶数还是奇数。
这正是java对于“%”操作的定义所产生的结果,该操作被定义为对于所有int数值和所有的非零int 数值b,都满足:
(a/b)*b+(a%b)==a
这就说明在取余数的时候返回的一个非零的结果时,它于左边操作数具有相同的正负符号。所以当i是负极数的时候,i%2等于-1 而不是1,这样返回的也就理所当然是 false,
public static boolean judge(int i){return i%2!=0;}就能很好解决这个问题。
如果要效率而言的话:
public static boolean judge(int i){return(i&1)!=0)}这个效率会更高点。
所以这是一个比较隐藏的问题。