每日一题(四九)不借助中间变量交换两个变量的值 比如 let a = 1, b = 2 交换 a,b 的值

不借助中间变量交换两个变量的值

比如 let a = 1, b = 2; 交换 a,b 的值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

答案:

1.利用加法

let a = 1,b = 2;
b = a + b;
a = b - a;
b = b - a;

2.利用减法,可以解决加法溢出的风险

let a = 1;
let b = 2;

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

3.利用es6 的解构赋值

let a = 1;
let b = 2;
[a,b] = [b,a];

4.按位异或 ^,用到按位异或这个位运算的性质,即相同则为 0 ,不同则为 1

对于两个数字,a 和 b,则有 a^a^b 就等于 b。我们利用这个性质来进行转换

let a = 1,b = 2;
b = a ^ b;
a = a ^ b;//a = a ^ a ^ b;
b = a ^ b;//b = a ^ b ^ b;

过程解释:

a = > 01

b => 10

a ^ a - > 01 ^ 01 肯定是 00  ,因为相同为 0

a ^ a ^ b -> 00 ^ 10 还是 10 ->b

a ^ a ^ b ->

(1)过程: 01 ^ 10 ^ 10 -> 11 ^ 10 -> 01 ->a

(2)其实这里涉及到数学的异或运算符性质:交换律:a ^ b ^ c <=> a ^ c ^ b

还有其他性质:任何数于 0  异或为任何数, 0 ^ n => n,相同的数异或为 0: n^n - >0

5.逗号表达式

逗号表达式是将两个及以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。利用这个性质,先完成一次赋值操作,然后将赋值操作的返回值变为 0  ,就可以了

let a = 1, b = 2;
a = b + ((b=a),0);

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值