JAVA求互换两个变量的值采用按位异或的方法的疑问,请大家帮小弟我解决一下谢谢了。

JAVA语言关于互换连个变量之间的值,一般都是声明第三方变量来互换;如果不用第三方变量,用两个变量想相加,然后再分别相减求得;

但是采用按位异或方法的时候比如:个
int a=3;
int b=8;

a=a^b;
b=a^b; //b=(a^b)^b(一个数同时异或另外一个数两次等于这个数) => b=a=3
a=a^b; //a=a^(a^b) => a=b=8

System.out.print(a+","+b)
就可以直接输出a=8,b=3。

——但是上面的第三步,a=a^b;的是b在第二步,b=a^b;的时候已经赋值成功为a(3)了,为什么第三步的a=a^b中的b,成为了最初声明的b的值了??

这个JAVA的普通运算逻辑想驳啊??

请大家给小弟我讲讲,谢谢了。

a=a^b; // a=11
b=a^b; //b=(a^b)^b(一个数同时异或另外一个数两次等于这个数) => b=3;11^8
a=a^b; // 11^3
第二步你理解错了。a此时不等于3,而是11追问

我理解错了,(应该是老师教错了)!!因为忘记第一步a已经等于11了,并不是像老师所说的第二步是 b=a^b^b=3^8^8=3而第二步是b=11^8=3,第三步a=11^8=3了。

没有问题了,被老师误导了。
嘿嘿

追答

ok,这程序简单,自己debug一下就知道结果了。
实践是检验真理的唯一标准。
ps:给个采纳呗。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-06
第二步:b=a^b; 你看这有两个b,一个是初声明的,一个是最后的
a=a^(a^b) ,这里的b可以看是初声明的
不好理解,你可以把第二步看成b2=a^b; 第三步a=a^b2追问

我理解错了,(应该是老师教错了)!!因为忘记第一步a已经等于11了,并不是像老师所说的第二步是 b=a^b^b=3^8^8=3而第二步是b=11^8=3,第三步a=11^8=3了。

没有问题了,被老师误导了。
你也跟着我想错了呢,嘿嘿

相似回答