|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题: 有两变量: 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变成1 1变成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都是最初始的
|
|