問題:下述方法判斷乙個整數是否可行
public static boolean isodd(int i)
解惑:
當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)
任何奇數(正奇數或者負奇數)模2運算都是不等於0的,但是偶數模2運算是等於0的,從而達到了判斷的目的。
為了使效能更優,可變換如下:
return (i&1)!=0;
邏輯操作與取餘操作速度相對快些。 奇數性之謎
關於奇數,我們平常一般會使用如下方法去判斷 public static boolean isodd int i 但是這樣的 對於正整數來說是ok的,但是對於負整數來說是不行的。因為返回將會是負整數。例如 3 2 1 總結一句話 上述判斷方式是不全面的 public static boolean is...
《java解惑》筆記一
isodd方法用來確定傳來的引數是否是奇數,由於當傳入負數i時,i 2的值為 1或0,負奇數也不能判斷正確。由於偶數是對2取余為0,所以應該將i 2 1修改為i 2 0。修改後,奇數對2取餘不是正1或負1都能滿足。public static boolean isodd int i public st...
《java解惑》筆記三
public static void main string args 控制台列印 1e240 7616 7616類似 復合賦值操作符,e1 op e2 等價於 e1 t e1 op e2 其中t是e1的型別。上面的例子中,當進行加法時,會將運算元提公升為int,得到123456,然後會轉化為sho...