题解 | #二进制中1的个数#

二进制中1的个数

http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        n=(n&0x55555555)+((n>>1)&0x55555555) #相邻两位加在一起
        n=(n&0x33333333)+((n>>2)&0x33333333) #相邻四位的加法
        n=(n&0x0f0f0f0f)+((n>>4)&0x0f0f0f0f) #8位
        n=(n&0x00ff00ff)+((n>>8)&0x00ff00ff)
        n=(n&0x0000ffff)+((n>>16)&0x000ffff) #32位的所有1加在一起
        return n
并行加法,0b0110100101000...101的一的个数,其实就是所有的1加在一起,有多大,,,换句话:有32个数相加,那么并行加法,先让16个数加16个数,然后8个数加8个数。。。一个数加一个数,最后就是结果
全部评论

相关推荐

03-18 17:29
武汉大学 C++
电话约面,这次来了个更猛的
在西伯利亚种土豆:pcg我愿称之为kpi之神
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务