请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
示例 1:
输入:00000000000000000000000000001011 输出:3 解释:输入的二进制串
00000000000000000000000000001011 中,共有三位为 ‘1’。 示例 2:输入:00000000000000000000000010000000 输出:1 解释:输入的二进制串
00000000000000000000000010000000 中,共有一位为 ‘1’。 示例 3:输入:11111111111111111111111111111101 输出:31 解释:输入的二进制串
11111111111111111111111111111101 中,共有 31 位为 ‘1’。提示:
输入必须是长度为 32 的 二进制串 。
理解随机一个二进制数-1时,需要借位的操作: eg:n = 100011000100 那么当发生n-1操作时, 100011000(100) 括号内的从低位到高位,一直到1,
每一位都发生了反转 即n-1 = 100011000011 n & (n-1) = 100011000100 & (100011000011) = 100011000000
那么 此时n-1 = 10001011111
&操作即将之前发生过反转的位都变为0, 循环n-1次后即可计算出二进制位1的个数。
每一次操作遇到1结束,所以每次操作都对应一个1,直到n的所有位变成0
(此时可以设一个变量count记录每次操作)
即计算结束