一、題目
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
二、思路
方法一:
用1(1自身左移運算,其實後來就不是1了)和n的每位進行位與,來判斷1的個數
方法二:
把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以進行多少次這樣的操作。例如乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0,它後面的兩位0變成了1,而前面的1保持不變, 因此得到的結果是1011.我們發現減1的結果是把最右邊的乙個1開始的所有位都取反了。這個時候如果我們再把原來的整數和減去1之後的結 果做與 運算,從原來整數最右邊乙個1那一位開始所有位都會變成0。如1100&1011=1000。也就是說,把乙個整數減去1,再和原整數做與運算,會把 該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以進行多少次這樣的操作。
三、**
方法一:
publicview codeclass
solution
flag=flag << 1;
}return
count;}}
方法二:
publicview codeclass
solution
return
count;}}
劍指Offer之二進位制中1的個數
題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。輸入 輸入可能包含多個測試樣例。對於每個輸入檔案,第一行輸入乙個整數t,代表測試樣例的數量。對於每個測試樣例輸入為乙個整數。n保證是int範圍內的乙個整數。輸出 對應每個測試案例,輸出乙個整數,代表輸入的那個數中1的個數。樣...
劍指offer之二進位制中1的個數
思路一 判斷整數二進位制表示中最後一位是不是1,然後將整數右移一位。重複這個步驟,直到整數變為零。1 如何判斷最後一位是不是1?將整數與1做 運算,結果為1,是。結果為0,不是。2 右移一位和將整數除以2在數學上等價,可以相互替換嗎?不能,除法的效率要比移位運算低得多。實際程式設計中盡可能用移位運算...
劍指Offer 擴充套件 二進位制 小公尺
世界上有10種人,一種懂二進位制,一種不懂。那麼你知道兩個int32整數m和n的二進位制表達,有多少個位 bit 不同麼?輸入例子 1999 2299 輸出例子 7 分析 將兩個整數逐位進行比較,累加不同位的個數,直至兩個數都為0.比較兩個數的最後一位,然後分別右移一位,直至兩個數都為0.defin...