题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示
输入输出示例
示例1:
输入:10
返回值:2
示例2:
输入:-1
返回值:32
解题思路
补充知识
补码:原码取反后加1
-5:符号为为1,5的二进制原码为0000 0101
-5的原码为:1 0000 0101;符号位不变其余位取反后:1 1111 1010;
取反后加1 1111 1010 + 0000 0001=1 1111 1011
方法一
- python中二进制不只有32位,首先使用0xFFFFFFFF截取n的32位表示;
- 将n使用bin()函数转换为二进制数,然后转换为字符串的形式
- 遍历字符串,遇到1,计数加1,循环结束,返回count。
方法二 - 遍历32次,从1开始按位与,每次移动一个位置判断并和n与的结果计算结果不为0的次数。
代码示例
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
'''
方法1:
n = 0xFFFFFFFF & n
count = 0
for i in str(bin(n)):
if i == '1':
count += 1
return count
'''
# 方法2:按位与的方式
count = 0
for i in range(0, 32):
mask = 1 << i
if n & mask != 0:
count += 1
return count