如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1(如果最右邊的1後面還有0的話)。其餘所有位將不會受到影響。
舉個例子:乙個二進位制數1100,從右邊數起第三位是處於最右邊的乙個1。減去1後,第三位變成0,它後面的兩位0變成了1,而前面的1保持不變,因此得到的結果是1011.我們發現減1的結果是把最右邊的乙個1開始的所有位都取反了。這個時候如果我們再把原來的整數和減去1之後的結果做與運算,從原來整數最右邊乙個1那一位開始所有位都會變成0。如1100&1011=1000.也就是說,把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以進行多少次這樣的操作。
def
num(self,n)
: count =
0if n ==0:
return count
if n <0:
n = n &
0xffffffff
while
(n):
count +=
1 n = n &
(n -1)
return count
def
numberof1
(self, n)
:if n >=0:
return
bin(n)
.count(
'1')
else
:return
bin(2**
32+ n)
.count(
'1')
整數二進位制中1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。如果是0,返回0 如果是正整數,除二取餘法 如果是負數 3.1 如果是 2147483648 int表示最大絕對值的負數 其補碼是1000 0000 0000 0000 0000 0000 0000 0000,故返回 1 3.2 其他...
整數二進位制中1的個數
要統計乙個整數二進位制中1的個數,首先我們會想到最簡單的方法就是 2 再 2,然後判斷每一位是否為1。但是,如果這是乙個很大的數,頻繁的除法運算效率不是很高。而位運算比乘除法效率高,所以我們就來用位運算解決這道題。首先方法一,當num大於0時,判斷num 1 的值,即可知道最後一位的值,迴圈每次nu...
求二進位制中1的個數
在 程式設計之美 一書中有一節提到如何求乙個位元組的無符號整型變數二進位制表示中中1的個數,主要提到了四種方法。下面簡單介紹一下 1.求餘法 在將十進位制數轉換為二進位制數時,採用除2取餘法。將每次除2得到的餘數儲存起來逆序輸出便是該十進位制整數的二進位制表示。因此可以採用這種方法去統計1的個數。i...