题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
# -*- coding:utf-8 -*- class Solution: def NumberOf1(self, n): # write code here ''' int count=0 while(n>0): count += 1 n=n&(n-1) return count #思想错误 ''' #举例来说,6的二进制是 110 ,6-1=5的二进制是 101, #6&5=100, 如此操作之后6中原来的110变为100,循环计数统计1的个数, #直至n变为0为止。 #但是内存中显示n的十进制值为-4294967296,满足 n!=0 的条件, #循环会继续执行。在此之后的循环中,n的二进制表示一直显示为0b0, #但内存中n的十进制数继续不断减少 #int 为带符号类型,带符号类型最高为是符号位,又因为0xFFFFFFFF, #也就是四个字节32 bits全是1, 符号位是1,所以这个数是负数 count = 0 while n&0xffffffff != 0: count += 1 n = n & (n-1) return count