实现两个数的交换

今天来浅谈一下如何实现两个数交换。

借数计算

最简单且易思考的就是借助另一个数来计算。

就好比你有一个雪碧瓶子装满可乐,一瓶个可乐瓶子装满雪碧,如何让两瓶饮料互换瓶子呢,肯定是再拿一个空瓶子,然后先将可乐瓶子里面的雪碧倒在空瓶子里,然后将雪碧瓶子里的可乐倒入可乐瓶子里,然后将新拿出来的瓶子里的雪碧倒进雪碧瓶子里,这样就完成了饮料的置换。

b78c4872194f42d89b60a24ed5e55887.gif

3248f544e68347ab9e51d820cbb07583.gif

31a8dfa598ed4cd2a224442a2f1a234c.gif

代码如下

int main()
{
	int a = 3;
	int b = 5;	
	int c = 0;
	c = a;
	a = b;
	b = c;
	printf("a=%d,b=%d", a, b);
	return 0;
}

相加计算

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

	a = a + b;
	b = a - b;
	a = a - b;

	printf("a=%d,b=%d", a, b);
	return 0;
}

 但是这种方式有一种弊端,如果a和b很大,但是没有超出整数的大小,但是a+b如果超出,就会发生溢出。

位运算符^计算

第三种方法就是用位运算符^

^ :按(二进制)位异或   

使用规则:相同为0,相异为1

a ^ a = 0 ;
0 ^ a = a ; 

异或运算不会溢出。

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

	a = a ^ b;
	b = a ^ b;//b = a ^ b ^ b = a
	a = a ^ b;//a = a ^ b ^ a = b

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值