11バイナリ数1
問題:
進数1での出力の数を示す整数。ここで、負の数は補数を示します。
ソリューション:
思想:
ゼロ以外の整数ならば、これは少なくとも1の整数です。一番右の1を0に変更されるで我々は整数1、元の整数を引く場合、元となる(0、次に右端の場合、続いて1があります)、すべての01 1は戻ってきます。すべての残りのビットは影響を受けません。
例えば:第三の数の右に進数1100は、右端の1です。結果は、我々はマイナス1の結果は右端にあることがわかっ1011であるので、フロントは、不変のままで1減算した後、第三は0になり、それが後0 1 1の2つになりました1つのビットは全て後方取り始めています。オリジナルの整数後の結果は、我々は、その後の操作で行うと、元の整数から1を引いた場合、この時間は1すべてのビットが0になり始めたものを一番右。そのような元の整数演算を行うには、次いで1100&1011 = 1000の整数マイナス1を入れ、そしてように、整数1が1のバイナリ整数の数、どのくらいすることができる0となる右端う回このような操作。
Pythonコード:
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count=0
if(n<0):
n=n&0xffffffff
while(n):
count+=1
n=(n-1)&n
return count