我们可以利用位操作符的按位异或 "^" 来实现这个功能:
首先,按位异或是指将两个整数的二进制补码形式的每一位依次取异或
异或:两数相同则值为0 不同为1
我们可以利用这个写出代码:
int a=10;
int b=20;
a=a^b;
b=a^b;
a=a^b;
printf("%d %d",a,b);
这个代码就可以实现两个整数的交换
接下来是运行原理:
我们可以将a和b都带入其下一个表达式,即:
b=a^b^b
a=a^b^a^b^b
由异或的定义我们可以发现:一个整数与它本身异或后得0
所以第二步表达式"b=a^b"就相当于: b=a;
第三步表达式""a=a^b"就相当于: a=b;
注意:第三步里的a是第一步提前储存的a,所以这里的b是原始的b,而不是改变后的b

被折叠的 条评论
为什么被折叠?



