位操作总结
Contents
注意
位, 是从最右边的位数开始的, 最右边的位为第0位.
位移
左移
int a = 1 << 0
int b = 1 << 1
右移
int a = 1 >> 0;
int b = 1 >> 1;
设置第 x 位
number |= (1 << x)
例如:
int a = 0;
a |=(1 << 5);
System.out.println(a);
System.out.println(Integer.toBinaryString(a));
输出结果:
32
100000
清除第 x 位
number &= ~(1 << x)
说明:
~
表示异或, 即对应位为0时, 返回的是1. 对应位为1时, 返回的是0. 然后 &= , 即与异或的结果再进行位与.就是设置某位为0了.
例如
int a = 0;
a |=(1 << 5);
a |=(1 << 8);
System.out.println(a);
System.out.println(Integer.toBinaryString(a));
//清除第5位
a &= ~(1 << 5);
System.out.println(Integer.toBinaryString(a));
输出结果
288
100100000
100000000
切换 x 位.即1变成0, 0变成1
number ^= (1<< x)
例如
int a = 0;
a |=(1 << 5);
a |=(1 << 8);
System.out.println(a);
System.out.println(Integer.toBinaryString(a));
//切换第5位. 上面设置为1了, 现在把它设置为0
a ^= (1 << 5);
System.out.println(Integer.toBinaryString(a));
//上面设置为0了, 现在再切换为1
a ^= (1 << 5);
System.out.println(Integer.toBinaryString(a));
输出结果
288
100100000
100000000
100100000
检测 x 位是否为1
((number >> x) & 1) == 1
例如
int a = 0;
a |= (1 << 5);
a |= (1 << 8);
System.out.println(a);
System.out.println(Integer.toBinaryString(a));
//检测第5位是否为1
boolean _5thBit = ((a >> 5) & 1) == 1;
System.out.println(_5thBit);
输出结果
288
100100000
true
填充所有位为1
number = ~(number & 0)
例如:
int a = 0;
a = ~(a & 0);
System.out.println(a);
System.out.println(Integer.toBinaryString(a));
输出结果:
-1
11111111111111111111111111111111