学习笔记之位运算
问题:有两变量:int a = 10, b = 20;怎样实现不借助中间变量交换两变量的值?使之 a = 20, b = 10?
其实很简单,只要如下就可以了
a = a ^ b; //异或运算符" ^ " 它的规则是1 ^ 0 ->1 0 ^ 0 ->0 即 任何数与0异或 都不变;
b = a ^ b; // 1 ^ 1 ->0 0 ^ 1 ->1 即 无论是0还是1与1异或都会实现反转即0变成11变成0
a = a ^ b;
分析:
a=10的二进制 0000 1010
b=20的二进制 0001 0100
a = a ^ b就是 0001 1110
b = a ^ b 0000 1010 是不是就等于10?
a = a ^ b 0001 0100 是不是就等于20?
再次分析:
a = a ^ b;
b = a ^b; // 我们把a代入进去看看 即b = a ^ b ^ b 其中b ^ b 不就等于0吗 即b = a ^ 0前面说过 任何数与0异或都不变所以b = a
a = a^b; //我们再代入看看 a = a ^ b ^ a ^ b ^ b 别被这些搞糊涂哦再按照上面的规则 是不是得出 a = b ?
// 注意了等号右边的a和b都是最初始的
页:
[1]