java中a=a^b;b=a^b;a=a^b;它的变化详细过程是怎样的?
^int a= 10; // 00001010(二进制)
int b= 5; // 00000101(二进制)
∵0^du0=0,1^1=0,0^1=1,1^0=1
∴00001010^00000101=00001111
∵二进制00001111=十进制15
∴a^b = 15
例如:
位运算是C语言的一大特色,利用异或运算可以实现交换两个数,原理是一个整数与另外一个数进行两次异或运算仍然是其本身,基本原理用式子表达如下:
(1) A ^ A = 0;
(2) A = A ^B;
(3) B = A ^B;(相当于B = A ^ B ^ B ,即 B = A)
(4) A= A ^ B;(相当于A = A ^B ^A ,即A = B)
利用位运算不仅提高了代码的执行速度,而且此处还减少了对辅助变量的需求,因此提高了程序的效率。
扩展资料:
归零律:a ⊕ a = 0
恒等律:a ⊕ 0 = a
交换律:a ⊕ b = b ⊕ a
结合律:a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
自反:a ⊕ b ⊕ a = b.
d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
若x是二进制数0101,y是二进制数1011;
则x⊕y=1110
只有在两个比较的位不同时其结果是1,否则结果为0
即“两个输入相同时为0,不同则为1”!
参考资料来源:百度百科-异或
不是判断整个a和b是否相等。
结果应该是a和b的数值互换。
我知道是a和b的数值互换,但是其互换的最详细的过程是怎么样的,麻烦分析一下,谢谢!
第一步: a=a^b 现在a中记录下了原a和原b每位上相同不相同的标志(0代表相同1代表不同)
第二步:b=a^b
注意0^0=0 0^1=1 a中若第i位为0,则结果b中保留和原b一样,
但0又表示代表相同原a中第i位和原b第i位一样,所以结果b中第i位和原a中第i位一样
又1^0=1 1^1=0 a中若第i位为1,则结果b中第i位和原b第i位是相反的,
但1又表示代表相同原a中第i位和原b第i位不同,所以结果b中第i位和原a中第i位一样
这样第二步的结果新b就是原来的a
第三步和第二步是类似的,
int b = 5; // 00000101(二进制)
∵0^0=0,1^1=0,0^1=1,1^0=1
∴00001010^00000101=00001111
∵二进制00001111=十进制15
∴a^b = 15