java|骚操作!!!如何不使用临时变量,实现交换swap。
一般,为了实现swap函数,我们会创建一个临时变量tmp
int tmp = a;
a = b;
b = tmp;
【java|骚操作!!!如何不使用临时变量,实现交换swap。】那么我们如何不使用临时变量来实现交换呢?下面给出两种方法:
-
a = a + b; // a = a + b, b = a - b; // b = (a + b) - b = a; a = a - b; // a = (a + b) - a = b;
-
a = a ^ b; // a = a ^ b; b = a ^ b; // b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a; a = a ^ b; // a = (a ^ b) ^ a = b ^ (a ^ a) = b ^ 0 = b;
我们第一次见这两个骚操作可能会一脸懵B,下面解释下为什么可以这样做:法一:理解一句话即可:“=” 右边的结果赋值给左边, 具体看注释即可。
法二:需要我们理解 ^ 异或,异或的骚操作可不少,具体后面可能会讲。
运算规则
相同为0,不同为1,即
1 ^ 1 = 0
0 ^ 0 = 0
1 ^ 0 = 1
由运算规则可知,任何二进制数与零异或,都会等于其本身,即A ^ 0 = A ,A ^ A = 0
异或性质
(1)交换律: A ^ B = B ^ A
(2)结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )
(3)自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)
具体看注释即可。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 在线版的迅捷思维导图怎么操作()
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 操作系统|[译]从内部了解现代浏览器(1)