JAVA一道面試題:
在判斷一個數是奇數還是偶數時,應該選擇哪一種方式來判斷呢?代碼如下()
A:
int val=//一個數字
if(val%2==0)
System.out.println("偶數");
else
System.out.println("奇數");
B:
int val=//一個數字
if(val%2==1)
System.out.println("奇數");
else
System.out.println("偶數");
很多人都會覺得這2種方式都一樣吧。其實不然。當一個整數大於0的時候.2種方式的結果一致。但是當這個整數小於了0那麼結果有分歧了。
選A的方式-1%2則爲-1不等於0所以他爲奇數是對的。但是選B的方式和-1%2卻不等於1那麼結果-1是偶數。
那麼爲什麼B方式有這樣的錯誤呢?模運算的底層算法是
A%B--------------------return A - (A/B) * B
那麼-1%2結果當然是-1。所以判斷語句會進入else,造成了-1爲偶數這個結果。