請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成1001,有2位是1。因此如果輸入9,該函式輸出2。
1.可能引起死迴圈的解法:
判斷輸入的整數最右一位是否為1,然後迴圈右移,但是問題是如果輸入的整數是乙個負數,那麼迴圈右移就會變成死迴圈。
2.常規解法:
將輸入的整數不進行右移,而是將1進行迴圈左移進行判斷。
3.能給面試官帶來驚喜的解法:
思路為把乙個整數減去1之後再和原來的整數做位與運算,得到的結果相當於把整數的二進位制表示中的最右邊乙個1變成0。此方法整數有幾個1就迴圈幾次。
1.常規解法:
int numberof1(int n)
flag = flag << 1;
}return
count;
}
2.能給面試官帶來驚喜的解法:
int numberof1(int n)
return
count;
}
1.用一條語句判斷乙個整數是不是2的整數次方。它的二進位制表示中有且僅有乙個1,把這個數減去1和自己位與,這個整數中唯一的1就會變成0。
2.輸入兩個整數m和n,計算需要改變m的二進位制表示中的多少位才能得到n。我們可以分為兩步:第一步求這兩個數的異或,第二步統計異或結果中1的個數。
劍指Offer 擴充套件 二進位制 小公尺
世界上有10種人,一種懂二進位制,一種不懂。那麼你知道兩個int32整數m和n的二進位制表達,有多少個位 bit 不同麼?輸入例子 1999 2299 輸出例子 7 分析 將兩個整數逐位進行比較,累加不同位的個數,直至兩個數都為0.比較兩個數的最後一位,然後分別右移一位,直至兩個數都為0.defin...
劍指offer 10 二進位制中1的個數
請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1,因此如果輸入9,該函式輸出2.思路 1 針對正數,把n左移 把整數和1做位與運算看結果是不是0就知道了。1除了最右邊的一位之外所有的位都是0 除法的效率比移位運算要低很多,在實際程式設計中應盡...
劍指Offer10 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該二進位制表示中1的個數。例如把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2。解題思路 常規的解法可以去遍歷整數對應二進位制的每一位,比如 數字9的二進位制1001,依次將每一位的數字與1進行 與 運算,若結果為1則表明對應的位數為1 ...