基础总结
注意:以下都是以二进制的形式进行移动的
(移位)位运算符 | 名称 | 作用 |
---|---|---|
<<<x | 无符号左移 | 忽略符号位向左位移X位左边补0 |
>>>x | 无符号右移 | 忽略符号位向右移动X位右边补0 |
<<x | 左移 | 不移动符号位向左移动X位 |
>>x | 右移 | 不移动符号位向右移动X位 |
& | 按位与 | 只有一个二进制位是0结果就是0 |
l | 按位或 | 只要有一个二进制是1结果就是1 |
~ | 按位取反 | 0变1,1变0 |
^ | 按位异或 | 相同为0不同为1 |
常见应用
//判读奇偶
x % 2 == 1 // (x & 1) == 1
x % 2 == 0 // ( x & 1) == 0
//除以2
x >> 1 // x / 2
在使用位运算时,最好注意要进行添加括号,因为位运算优先级比较低,是低于关系运算符的;
大家可以去leetcode进行位运算的练习:
困难题n皇后问题
简单题:leetcode 191
首先对这个题目只要清楚基本的位运算即可;然后对数字的二进制表示清楚。
数字
如果为奇数则二进制表示末位为1
如果为偶数则二进制表示末位为0
所以判断其奇偶即可,然后每判断一次,对数字进行一次向右移位操作,注意因为其最高为可能为1,并且题目也要求判断,因此要使用无符号右移操作
public class Solution {
public int hammingWeight(int n) {
int count = 0;
while(n!=0){
if( (n&1) == 1)
count++;
n = n >>> 1;//根据题目这里需要使用无符号位移
}
return count;
}
}