位操作
2016-03-02 10:41
162 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiao92xiao/article/details/50777893
(3).n&n-1,减少循环的次数,有多少个1则循环多少次,把一个整数减去1,再与原整数相与,可以将该整数的最右边一个1变为0:
2.判断一个整数是不是2的整数次方:如果一个数是2的整数次方,那么它的二进制表示中应当只有一个1,其它各位应当都是0。
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;
}