交换两个int类型数值(总结分析,理解记忆)

有哪些方法可以交换两个int类型数值呢?
总结一下,给出分析,方便记忆。

 

方法一:利用一个临时变量去存储,这个最容易想到

int tmp = a;
a = b;
b = tmp;

 

方法二:利用加减法得到
(想法1):

a = a - b;    //计算a和b的距离
b = b + a;  //b + 距离,自然等于a
a = b - a;   //a - 距离,自然等于b,注意:这里b的值已经等于原来a的值了


(想法2):

a = a + b; //计算a,b的和
b = a - b;  //a,b的和减去b,自然等于a
a = a - b; //a,b的和减去a(注意虽然是减b,但是b的值在上式中已经变成了a),自然等于b


方法三:利用连续计算(思想同方法二中想法2)

// 用加减实现,而且不会溢出
a = a+b-(b=a) 

 

方法四:利用异或操作
首先理解异或:
(1)以两个数为角度:在两个数中值相同位上取1,值不同位为取0;

(2)以“用一个数b去异或一个数a”角度:在b为1的位上将a的相应位值取反。

a=a^b;   //a中保存a和b中不同的位置,记录为1(即需要交换的位),用(1)理解
b=a^b;   //在a为1的位上,b相应的0变1,1变0;在a为0的位上,b相应的0不变,1不变;用(2)理解
a=a^b;   //同上,但是需要注意:这里的b是原来的a值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值