輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
題解1:
從n的2進製形式的最右邊開始判斷是不是1:n&1 == 1,count+=1,n>>1
該解法如果輸入是負數會陷入死迴圈,
因為負數右移時,在最高位補得是1,移到最後會全變成1
本題最終目的是求1的個數,那麼會有無數個
題解2:
正整數的補碼不變,負整數的補碼為取反加一。
**
# -*- coding:utf-8 -*-
class
solution
:# 從n的2進製形式的最右邊開始判斷是不是1:n&1 == 1
# 該解法如果輸入是負數會陷入死迴圈,
# 因為負數右移時,在最高位補得是1,移到最後會全變成1
# 本題最終目的是求1的個數,那麼會有無數個
defnumberof1
(self, n)
:# write code here
count =
0if n <0:
n = n &
0xffffffff
#計算n的補碼
while n !=0:
n = n&
(n-1
) count +=
1return count
if __name__ ==
'__main__'
: s = solution(
)print
(s.numberof1(-8
))
總結
把乙個整數減去1之後再和原來的整數做位與運算,得到的結果相當於是把整數的二進位制表示中的最右邊乙個1變成0,很多二進位制的問題可以用這個思路解決。
二進位制 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...
二進位制1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。可能引起死迴圈的解法 class solution return cnt 由於數字在計算機中的二進位制儲存事實上並不包含符號 也就是 都是統一用補碼表示的。移位操作會保證數的正負不變,當遇到乙個負數,右移到最前面的符號位1時,再往右移...
二進位制中1的個數(python)
原始碼 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。coding utf 8 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1 後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響...