二进制中1的个数
二进制中1的个数
问题陈述
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
方法一:逐位与1相与
根据 与运算 定义,设二进制数字 n ,则有:
若 n & 1 = 0,则 n 二进制 最右一位 为 0 ;
若 n & 1 = 1 ,则 n 二进制 最右一位 为 1。
根据以上特点,考虑以下 循环判断 :
判断 n 最右一位是否为 1 ,根据结果计数。
将 n右移一位(本题要求把数字 n 看作无符号数,因此使用 无符号右移 操作)。
1 | class Solution{ |
二进制移位相关知识
- **无符号右移:**无论是正数还是负数,高位通通补0。
- 右移运算符:它表示是将运算符左边的对象向右移动,移动位数为运算符右边指定的数,并且在高位补0,其实右移n位,就相当于除于2的n次方。
- 带符号右移运算符:它表示将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1;
- **左移运算符:**它表示是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n位,就相当于乘上2的n此方;
方法二:n &(n-1)
1 | public class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 淋竹调!
评论