前言
在我们一般交换两个变量的时候,都会用到第三个变量,代码如下:
#include <stdio.h>
int main()
{
int a,b,tem;
tem = a;
a = b;
b = tem;
return 0;
}
而这条面试题只允许我们使用两个变量
正文
在C语言中有个运算操作符为“ ^ ” ,按位异或操作符
它在计算机底层计算的原理中,相同位置的二进制序列进行对比,相同为0,相异为1
![在这里插入图片描述](https://img-blog.csdnimg.cn/5292b6e9fee6400faae5834f4dbddfbd.jpeg#pic_center
1^1=0 ,1^0=1 ,0^1=1 ,0^0=0
相同为0,相反为1
也可以理解为相同的可以约掉等于0
废话不多说,上代码:
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("交换前:%d %d\n", a, b);
a = a ^ b;
b = a ^ b; //b = a ^ b ^ b = a
a = a ^ b; //a = a ^ a ^ b = b
printf("交换后:%d %d\n", a, b);
return 0;
}
最后
大家没看懂的可以评论区问我,如果我写错了,请大家评论区纠正!!