二进制中1的个数

输入一个整数,输出该数二进制表示中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 };

 

posted @ 2019-07-04 10:42  Austin_anheqiao  阅读(361)  评论(0编辑  收藏  举报