剑指offer24 — 二进制中1的个数
题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
分析 & 解
补码: 正数不变,负数是它的正数的反码+1。
解法1 :转换为字符串
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
n= 0xFFFFFFFF & n
count = 0
for c in str(bin(n)):
if c == "1":
count +=1
return count
解法2: 按位与
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
n= 0xFFFFFFFF & n
count = 0
for i in range(32):
mask = 1 << i
if n & mask !=0:
count+=1
return count
解法3: n & (n-1)
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
count = 0
while n:
n = n & (n-1)
count += 1
n = 0xFFFFFFFF & n
return count