交换变量(不能使用第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++笔试题的主要内容,如果未能解决你的问题,请参考以下文章

C语言 操作符详解

c++笔试题:不使用第三个变量来交换俩个变量的数值

PHP不用第三变量交换2个变量的值的解决方法

不借助第三个变量实现两个变量交换及原理分析

不借助第三个变量,交换两个变量值的3种方式

函数封装2.4交换某两个变量的值