二进制数中1的个数
Problem
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
Solution
class Solution():
def NumberOf1(self,n):
if n<0:
return (32 - bin(~n).count('1'))
else:
return bin(n).count('1')
负数,先按位取反
~
得到「相反数-1」,「相反数-1」里的“1”=原数补码里的“0”,32-补码里“0”的个数即得到1的个数。非负,直接数1
补充: n = n & (n-1)
相当于去掉二进制n里「从右往左第一个1」,直到n=0,迭代次数即1的个数。
class Solution():
def NumberOf1(self,n):
cnt = 0
while n!=0:
n&=(n-1)
cnt+=1
return cnt
Last updated
Was this helpful?