交换变量(不能使用第3个变量) - 品茗股份c++笔试题
Posted 跳动的bit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换变量(不能使用第3个变量) - 品茗股份c++笔试题相关的知识,希望对你有一定的参考价值。
/***********************************************************************
目的:不能创建临时变量(第3个变量),实现2个数的交换
分析:
▶ 借助2数之和与变量的运算:
▶ 使用异或’^’:
平台:Visual studio 2017 && windows
*************************************************************************/
📝 实现代码1:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf(a = %d b = %d\\n", a, b);//3 5
a = a + b;
b = a - b;
a = a - b;
printf(a = %d b = %d\\n", a, b);//5 3
return 0;
}
这种写法是有问题的:当这2个数足够大时,相加可能会造成数值溢出
📝 实现代码2:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("a = %d b = %d\\n", a, b);//3 5
a = a ^ b;//以下的括号没有任何意义
b = a ^ b;//(a ^ b) ^ b -> a
a = a ^ b;//(a ^ b) ^ ((a ^ b) ^ b) -> b
printf(a = %d b = %d\\n", a, b);//5 3
return 0;
}
以上是关于交换变量(不能使用第3个变量) - 品茗股份c++笔试题的主要内容,如果未能解决你的问题,请参考以下文章