判斷一個(gè)數(shù)是否為奇數(shù)

2020-5-8

今天茶足飯飽之余,在知乎上看到了一篇文章《記一道簡(jiǎn)單的java面試題》

題目為:實(shí)現(xiàn)一個(gè)方法,判斷一個(gè)整數(shù)是否為奇數(shù)。

應(yīng)試者的第一段代碼:

public boolean isOdd(int i) {
    if (i % 2 == 1) {
        return true;
    } else {
        return false;
    }
}

如果應(yīng)試者真的寫出這樣的代碼,我想應(yīng)該基本就掛掉了吧。這段代碼的問題是應(yīng)試者沒有考慮到輸入的整數(shù)為負(fù)數(shù)的情況。例如當(dāng)輸入值為-1,這段代碼返回的結(jié)果為false,另外既然返回值為布爾類型,就不需要多余的if...else判斷語句。代碼進(jìn)而可以優(yōu)化為:

public boolean isOdd(int i) {
    return i % 2 != 0;
}

這樣一來,既增加了可讀性,也使代碼具有魯棒性。

有沒有更好的方法呢?或者說是否可以不通過取模的方式來完成這個(gè)函數(shù)

奇偶的區(qū)別在于最后一位是1還是0,我們只需要位運(yùn)算操作,就可以將代碼簡(jiǎn)化至:

public boolean isOdd(int i) {
    return (i & 1) == 1;
}

最后,在本篇文章中作者指出:

我:“這樣是不是比上面取模運(yùn)算要快?”
候選人:“那當(dāng)然了,位運(yùn)算肯定快啊。”
我:“但是我們實(shí)際代碼測(cè)試過,發(fā)現(xiàn)上面的按位與操作和取模操作,實(shí)際運(yùn)行的時(shí)間是差不多的,為什么呢?”

作者給出的解釋:


這其實(shí)也解決了我一直以來的疑惑~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容