黑马程序员技术交流社区
标题:
关于不使用第三方变量用^实现两个整数值的转换
[打印本页]
作者:
刘家斌
时间:
2014-10-12 21:19
标题:
关于不使用第三方变量用^实现两个整数值的转换
int x=6;
int y=8;
x=x^y;
y=x^y;
x=x^y;
最后一个^怎么就得到了y的值了呢
作者:
wisely
时间:
2014-10-12 22:00
x:6====0110
y:8====1000
x=x^y==1110
y=x^y==1110^1000=0110=6
x=x^y==1110^0110=1000=8
异或就是当两个二进制相等时为0,其它为1.
作者:
LL.t
时间:
2014-10-12 22:18
本帖最后由 LL.t 于 2014-10-12 22:19 编辑
^是位运算符 意思是按位异或 即两位数相同则为0 否则为1
6表示为二进制就是 0110
8表示为二进制就是 1000
6^8 的结果就是 1110
然后在异或8就相当于6^8^8 ==( 6^0) ==6即
0110
^ 1000
^ 1000
= 0110
然后在异或6 就相当于6^8^6 == (0^8) ==8
作者:
Quasimodo
时间:
2014-10-12 22:33
本帖最后由 Quasimodo 于 2014-10-12 22:36 编辑
这个我们可以拆开来看
首先我们知道一个数异或同一个数两次就等于他本身,好接下来看
第一个:n=n^m //为了方便下面的解释,我们把式子左边的n标成n2,右边的n成n1,m标成m1。就变成n2=n1^m1
第二个:m=n^m // 这里再把左边的m标成m2,那么就相当于 m2=n2^m1。 把上面的带下来就等价于m2=(n1^m1)^m1。 运行结果当然是m2=n1
第三个: n=n^m // 同理这个式子相当于n3=n2^m2 ,把第一第二个的结果带下来就等价于n=(n1^m1)^n1。 运行结果当然是m1了
最后的结果就是m2=n1 ;n3=m1; 把我们的数字标识去掉就得到结果了 代码结束自此n m实现互换
作者:
Mr.Ni
时间:
2014-10-12 22:34
x=x^y;
y=x^y;//此时x=x^y,所以有y=(x^y)^y=x
x=x^y;//此时y的值为x,而x的值为x^y,所以有x=(x^y)^x
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2