LeetCode Number of 1 Bits

来源:互联网 发布:白夜水彩淘宝 编辑:程序博客网 时间:2024/06/04 19:12

题目:

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.

题意:

就是求一个十进制数的二进制表达方式中1的个数。要注意的是:这个数是无符号的数,而且要考虑32位。一开始露珠用常规的方法,就是将这个十进制数去不断除以2,然后得到它的二进制表示方式,然后就是去计算1的个数。但是这种方式会出现错误,就是当32位数全是1的时候,就会报错。在网上找了相关的方法和《编程之美》的那本书上有相关的介绍,发现有一种很简单的方式,也就是用java的&运算符,这个是针对二进制而言,非常重要的按位计算,然后得到相关的结果。因为如果采用将n & (n - 1)的方式后,那么就会出现每做一次这种运算,会将从右到左的第一个1的那一位变成0,其他高位不变,如果做位运算后得到的那个数大于1,那么就将1的个数加1.知道运算得到的结果为0.

public class Solution {    // you need to treat n as an unsigned value    public int hammingWeight(int n)     {        int num = 0;while(n != 0){num ++;n &= (n - 1);}return num;    }}
这道题目还是很有锻炼意义的,就是可以让我明白一般的按位运算符的作用。

0 0