题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路1
- 整数和1进行与运算,为True,count值就+1
- 否则整数就右移一位
- 直到<0
- 由于python的存储机制,当整数为负数时,需先将整数控制在32位字节(n=n&0xffffffff)
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
if not n:
return 0
count=0
if n<0:
n=n&0xffffffff
while n:
if n&1==1:
count+=1
n>>=1
return count
思路2
- 把整数-1再和原整数与,就能将整数最右边的1变为0
- 直到整数全为0
- 用一个count记录循环的次数即为1的个数
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
# write code here
if not n:
return 0
count=0
if n<0:
n=n&0xffffffff
while n>0:
n=n&(n-1)
count+=1
return count
测试用例
if __name__=='__main__':
s=Solution()
n1=6
n2=-1
print(s.NumberOf1(n1))
print(s.NumberOf1(n2))