[时时更新] & | ~ ^ 位运算的蛋疼妙用

[随时更新] & | ~ ^ 位运算的蛋疼妙用

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;

}