[时时更新] & | ~ ^ 位运算的蛋疼妙用
[随时更新] & | ~ ^ 位运算的蛋疼妙用
1. 交换两个数但不能使用临时变量
// method 1
void swap (int* a, int* b) {
*a ^= *b; *b ^= *a; *a ^= *b;
}
// method 2
void swap (int* a, int* b) { // 乘号改成加号时,除号改成减号。
// 当 *a 和 *b 都很大时,第一句可能会溢出。
*a *= *b; *b = *a / *b; *a /= *b;
}
2. 求两个数中较大的一个但不能使用比较语句
int max (int a, int b) { // a 与 b 的符号必须相同
return a ^ b | a;
}