面试经典--不用中间变量交换两个整数的值
在网上搜了大概有四种办法:
用下面的程序验证一下:
void swap1(int &a,int &b)
{
a=a+b;
b=a-b;
a=a-b;
return;
}
void swap2(int &a,int &b)
{
a=a-b;
b=a+b;
a=b-a;
}
/*swap3 很经典*/
void swap3(int &a,int &b)
{
a^=b;
b^=a;
a^=b;
/*等效的一句话操作是:
a^=b^=a^=b;
*/
}
/*swap4 ,最精炼*/
void swap4(int &a,int &b)
{
b=a^b^(a=b);
}
int main(int argc, char const *argv[])
{
int a=3;
int b=4;
printf("Before swap,a=%d ,b=%d\n",a,b );
swap1(a,b);
printf("After swap1,a=%d ,b=%d\n",a,b );
swap2(a,b);
printf("After swap2,a=%d ,b=%d\n",a,b );
swap3(a,b);
printf("After swap3,a=%d ,b=%d\n",a,b );
swap4(a,b);
printf("After swap4,a=%d ,b=%d\n",a,b );
return 0;
}
输出结果证明解法有效:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步