java,奇数性的问题

    技术2022-05-14  0

    我们常规的判断是否为奇数的方法一般是:

     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)}这个效率会更高点。

    所以这是一个比较隐藏的问题。


    最新回复(0)