交换两个数的值

提到交换两个数的值,通常我们会想到使用一个变量记录。比如:

int a = 10;
int b = 5;
// 交换a和b的值
int c = a;
a = b;
b = c;

这样其实会创建一个多余的变量。

那么有没有方法,不使用变量就可以交换两个数呢?

普及知识

^:异或运算符

性质:

1、0^n=n、n^n=0

2、符合交换律【a ^ b = b ^ a】

3、符合结合律【(a ^ b) ^ c = a ^ (b ^ c)】

通过异或我们就可以交换两个数,如下:

int a = 10;
int b = 5;
// 交换两个数

a = a ^ b; (1
b = a ^ b; (2
a = a ^ b; (3

证明:

(1) 中 a 和 b 的值分别是:

a = 10 ^ 5;

b = 5;

(2) 中 a 和 b 的值分别是:

a = 10 ^ 5;

b = 10 ^ 5 ^ 5 = 10 ^ 0 = 10

(3) 中 a 和 b 的值分别是:

a = 10 ^ 5 ^ 10 = 10 ^ 10 ^ 5 = 0 ^ 5 = 5

b = 10

由上可得 a = 5 ; b = 10 成功交换

注:交换两个数时,不能使用同一块内存空间(两个对象不能相同),如果为同一块内存结果则会为0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值