二进制中1的个数

Posted pacino12134

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制中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 ;

 

以上是关于二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章

算法:二进制中1的个数

10 二进制中1的个数

位运算--统计一个数的二进制序列中1的个数

二进制中1的个数

剑指offer-10.求一个数中二进制格式中1的个数

经典算法——二进制中1的个数