题解 | #二进制中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加在一起
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个数。。。一个数加一个数,最后就是结果