バイナリ中の1の個数(Python)

513 ワード

タイトルの説明
整数を入力し、その数のバイナリ表現の1つの数を出力します.ここで負数は補数で表される.
考え方:
ここでは巧みなアルゴリズムに関して、1つのバイナリ整数に対して、それを1つ減らしてそれ自体と相まって、この整数の最も右側の1をゼロに変えて、すべて0になるまで、どれだけ1が何回循環することができますか.負数については,最上位の符号ビットを反転させることで補符号を得ることができ,通常,0 x 7 FFFFFFFとの相乗を用いて得られる.
ps:初めてこの問題に触れると、自分から考えないで覚えておけばいいです.
コード:
class Solution:
    def NumberOf1(self, n):
        if n<0:
            n = n&0xffffffff
        count = 0
        while n:
            count += 1
            n = (n-1)&n
        return count