面试10:二进制中1的个数

【题目】输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
【思路】
一个数n,假设二进制个位上是1,则n-1后,个位上为0,其它位不变,如111-1变为110
假设n最右边m位为1,比如1100,右边第三位为1,n-1为1011,变化规律为m位变0,m位右边全为1,m位左边不变,故n与n-1按位与后,可留下m位左边的1。故为1的个数即为按位与不为0的次数。
注意边界条件:

【代码】

class Solution:
    def NumberOf1(self, n):
        INT_BITS = 32 
        MAX_INT = (1 << (INT_BITS - 1)) - 1 
        # write code here
        count = 0
        #进入循环,则n含有1
        while (n!=0):
            if n < - MAX_INT - 1 or n > MAX_INT + 1:
                break
            count+=1
            n = n & (n-1) #按位与
        return count
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容