不用临时变量交换两个数(离散、位运算)

题目:不用临时变量交换两个数的值。

思路1:先用其中一个变量存放它们的积,积除以另一个数即得原来的数。

a = a * b;

b = a / b;

a = a / b;

思路2:乘法可能会导致溢出,所以可以改用加法或减法,因为Java的整型采用补码,加减法即使溢出也不会导致被截掉,最后结果依然正确。

a = a + b;

b = a – b;

a = a – b;

思路3:如果熟悉位运算的话可以直接用^运算来代替,这样保证不会溢出。

a = a ^ b;

b = a ^ b;

a = a ^ b;

无论是加、乘还是异或运算都不会对交换有任何性能提升,因为它们相比用临时变量中转的方法调用了更多的运算指令,而且仍然需要寄存器存放临时值,并不会节省任何的空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值