不用中间变量交换两个整数的值
方法一:加减法
1 |
|
简单,但是可能会溢出。
方法二:异或运算
1 |
|
首先介绍异或运算的几条性质:
- 交换律:\(a \oplus b = b \oplus a\)
- 结合律:\((a \oplus b) \oplus c = a \oplus (b \oplus c)\)
- 逆元:\(a \oplus a = 0\)
- 单位元:\(a \oplus 0 = a\)
利用这些性质证明:
将 (1) 代入 (2):\(b = (a \oplus b) \oplus b = a \oplus (b \oplus b) = a \oplus 0 = a\)
将 (1) 和 (2) 代入 (3):\(a = (a \oplus b) \oplus a = b \oplus (a \oplus a) = b \oplus 0 = b\)
使用异或运算交换两个整数的值,不会溢出。
不用中间变量交换两个整数的值
http://blog.qzink.me/posts/不用中间变量交换两个整数的值/