- 分享
- 0
- 人气
- 0
- 主题
- 3
- 帖子
- 198
- UID
- 19026
- 积分
- 2953
- 阅读权限
- 20
- 注册时间
- 2005-10-14
- 最后登录
- 2018-9-19
- 在线时间
- 1609 小时
|
本帖最后由 Dhilip89 于 2010-9-13 06:36 AM 编辑
有一段时间没上来这里了。
相信每个程序员都有写过数值对换的代码吧,但是大部分的人会使用以下的方法来实现数值对换:- #include <stdio.h>
- int main(void)
- {
- int var1 = 20, var2 = 75, temp;
- printf("var1 = %d, var2 = %d\n", var1, var2);
- // swap the variable
- temp = var1;
- var1 = var2;
- var2 = temp;
- printf("var1 = %d, var2 = %d\n", var1, var2);
- return 0;
- }
复制代码 输出结果:
var1 = 20, var2 = 75
var1 = 75, var2 = 20
以上的方法会使用到第三个variable来进行对换。
现在我介绍不用第三个variable也可以进行数值对换的方法:- #include <stdio.h>
- int main(void)
- {
- int var1 = 20, var2 = 75;
- printf("var1 = %d, var2 = %d\n", var1, var2);
- // swap the variable
- var1 ^= var2; //same as: var1 = var1 ^ var2
- var2 ^= var1;
- var1 ^= var2;
- printf("var1 = %d, var2 = %d\n", var1, var2);
- return 0;
- }
复制代码 输出结果:
var1 = 20, var2 = 75
var1 = 75, var2 = 20
以上的方法是使用了XOR(bitwise operation)来达到数值对换的效果。
对于不熟悉bitwise operation的人应该会问:它是如何运作呢?
其实原理很简单:
以上采用了XOR,也就是eXclusive OR
OR 和 XOR 的差别:
1 OR 0 = 1
0 OR 0 = 0
1 OR 1 = 1
1 XOR 0 = 1
0 XOR 0 = 0
1 XOR 1 = 0
以下就是它的运作原理:Swaping two variables with XOR swapping algorithm:
Original:
a = 10010010
b = 11101011
Step 1:
a = a ^ b
10010010 <-- a
^ 11101011 <-- b
----------
01111001 <-- a
----------
Step 2:
b = b ^ a
11101011 <-- b
^ 01111001 <-- a
----------
10010010 <-- b
----------
Step 3:
a = a ^ b
01111001 <-- a
^ 10010010 <-- b
----------
11101011 <-- a
----------
Swapped:
a = 11101011
b = 10010010 注意:
以上方法不能用在浮点数值(float, double)。
进行对换的两者都必需同类型(int ^ int, char ^ char, short ^ short, etc...)。
小弟我可能会写错东西,望高手指点。 |
|