记录一些位运算的小技巧:
1.&(按位与)判断奇偶
num & 1 == 1
为true即奇数
2.^(按位异或)用于两数互换
数学基础:
a ^ a == 0
a ^ 0 == a
两个数a,b交换:
a = a ^ b;
b = a ^ b;//a ^ b ^ b == a
a = a ^ b;// a ^ b ^ a == b
3.求子集
思路就是以二进制编码的方法来穷举,如打印{a,b}的子集,共
2^2=4个,可以分别编码为00,01,10,11,有“1”就输出。
00即表示空集。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
int len = 1 << list.size();
for (int i = 0; i < len; i++) {
int num = i;
for (int j = 0; j < list.size(); j++) {
if ((num & 1) == 1) {
System.out.print(list.get(j) + " ");
}
num >>= 1;
}
System.out.println();
}
}
//持续更新