输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
说明:
首先所有正数和负数在计算机中都是以补码的形式存在的,所以不用考虑转换成补码,只要你把正数、负数的二进制能写出来就可以了,计算机后台会自动转换成补码计算的!
python
python二进制:
python二进制显示的时候前面会有个0b,负数的话是-0b
n>0 : bin(n)
n<0 :
python中输的大小是可以无限扩大的,不会存在溢出,如果一个数超过了32位,那么会自动扩大。
n<0时,负数的二进制其实是:1111111.......11111(接下来是32位的二进制);正数是(0000......000(接下来是32位二进制))。
所以 n=n&0xffffffff意思是 111...(32位二进制) & 000....(ffffffff),相当于把后32位留下来了,前面就都是0,这样不会陷入死循环。
方法一:
1 return bin(n).count('1') if n >= 0 else bin(2**32 + n).count('1')
方法二:
1 # -*- coding:utf-8 -*- 2 class Solution: 3 def NumberOf1(self, n): 4 # write code here 5 count = 0 6 if n<0: 7 n = n&0xffffffff 8 while n: 9 count +=1 10 n = n & (n-1) 11 return count
c++
1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int count=0; 5 while(n!=0){ 6 count++; 7 n = n & (n-1); 8 } 9 return count; 10 } 11 };