您的位置:首页 > 其它

位操作

2016-03-02 10:41 162 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/xiao92xiao/article/details/50777893

1.二进制中1的个数:

(1).依次判断一个二进制数的最右边一位是否是1,每次将需要判断的数右移一位:

public int hammingWeight(int n) {
int count = 0;
while(n != 0) {
if((n&1)!=0)count++;
n = n>>1;
}
return count;
}
可能会出现死循环(负数时) (2).依次判断一个二进制数的最右边一位是否是1,每次将1的位置左移一位:

public int hammingWeight(int n) {
int count = 0;
int flag = 1;
while(flag != 0) {
if((n & flag) != 0) count++;
flag = flag << 1;
}
return count;
}

(3).n&n-1,减少循环的次数,有多少个1则循环多少次,把一个整数减去1,再与原整数相与,可以将该整数的最右边一个1变为0:
public int hammingWeight(int n) {
int count = 0;
while(n != 0) {
n = (n - 1) & n;
count++;
}
return count;
}

2.判断一个整数是不是2的整数次方:如果一个数是2的整数次方,那么它的二进制表示中应当只有一个1,其它各位应当都是0。

public boolean isPowerOfTwo(int n) {
        return (n & (n-1)) == 0 && n > 0;
    }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: