题目:
请实现一个函数,输入一个整数,输出该数字二进制表示中 1 的个数。例如把 9 表示成二进制是 1001,有 2 位 是1。因此如果输入 9,该函数输出 2。
常规思路很清晰,将该数字和 1 按位与,如果结果是 1 则表明该数字最右一位是 1,如果结果是 0 则表明该数字最右一位是 0。不断将该数字右移,最终即可得到结果。代码如下:
1 | public class Solution { |
按照Java
的结构,一个int
型数字最长32
位,所以只需要循环32
次即可求得结果。
当然有一个更简单的解法,把一个整数减去 1,再和原整数做按位与运算,会把该整数最右边一个 1 变成 0。那么一个整数的二进制表示中有多少个 1,就可以进行多少次这样的操作。 例如数字 9(1001):
- 1001 & (1001 - 1) = 1000
- 1000 & (1000 - 1) = 0
一共进行两次,运算进行的次数就是最后的结果,代码实现如下:
1 | public class Solution { |