整形交换新思路(可以不创建新变量)

交换两个整型变量,你最常用的方法是什么?

相信大部分人的思路都差不多,就是通过创建新的中间变量来完成
例如:

int main()
{
	int a = 2;
	int b = 3;
	printf("交换前: a==%d b==%d\n", a, b);
	int tmp = a;
	a = b;
	b = tmp;
	printf("交换后: a==%d b==%d\n", a, b);
	return 0;
}

运行结果如下:
运行结果

但是,如果禁止创建新的变量,你又该如何实现?

接下来我给大家推荐两个我使用的方法:

1. 数学加减实现

首先我们来看代码

int main()
{
	int a = 2;
	int b = 3;

	a = a + b;//a==5 ,b==3
	b = a - b;//a==5 ,b==2;
	a = a - b;//a==3 ,b==2
	printf("%d %d", a, b);
	return 0;
}

这段代码的实现过程是根据数学思想实现的
先使 a 的值成为两者之和 5,然后用 a 减去 b 的值 2 赋值给 b,实现了将 a 的值交换给 b,然后再用 a 的值减去现在的 b 的值 3 赋值给 a,就实现了将 b 的值交换给 a。

2. 逻辑运算实现

还是先来看一下代码

int main()
{
	int a = 2;
	int b = 3;
	
	a = a ^ b;  //a==(a^b)     ,b==b
	b = a ^ b;  //a==(a^b)     ,b==(a^b)^b==a
	a = a ^ b;  //a==(a^b)^a==b, b==a
	printf("%d %d", a, b);
	return 0;
}

这段代码的实现过程是根据逻辑运算实现的

首先我们介绍一下逻辑操作符:异或( ^ )

异或操作符最常用的特点是,相同为0,相异为1

和本身异或的结果为0,和0异或的结果是其本身

在这里插入图片描述
相信现在你结合代码的注释就能很好的理解其过程了。其本质思想和第二种方法并没有本质上的区别,异或的具体实现方式是根据其整形的反码实现的,具体实现过程不做详细介绍,感兴趣的可以关注我接下来的博客。

以上就是我对整形交换现有的所有了解,共有三种方法可供选择,如果你有更好的思路和方法,欢迎和我一起交流探讨!

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值