您的位置:首页 > 其它

不使用额外空间实现两个变量(int 型)的交换

2013-08-16 21:34 429 查看
这个问题不难,主要有两种方式实现。

1):用“加减”运算实现

int a = 100;
int b = 200;
a = a + b;  //300
b = a - b;  //100
a = a - b;  //200


2):用“异或”运算实现

int a = 1;
int b = 10;
a = a ^ b;  //0001 ^ 1010 = 1011 (11)
b = a ^ b;  //1011 ^ 1010 = 0001 (1)
a = a ^ b;  //1011 ^ 0001 = 1010 (10)


 

这里简单的介绍一下“异或”运算符:(这里用的便是第6条)

1. a ^ a = 0
2. a ^ b = b ^ a
3. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
4. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
5. a ^ b ^ a = b.
6.若x是二进制数0101,y是二进制数1011
则x^y=1110
只有在两个比较的位不同时其结果是1,否则结果为0
即“相同为0,不同为1”!
 
输入
运算符
输入
结果
1
^
0
1
1
^
1
0
0
^
0
0
0
^
1
1
 

有异或运算,那一定有“同或”运算:

1.“同或”是一个数学运算符。他应用于逻辑运算。 其运算法则为a同或b=ab+a‘b’(a'为非a)。
真“同或”假的结果是假,假“同或”真的结果也是假,真“同或”真的结果是真,假“同或”假的结果是真。就是说两个值相同,则同或结果为真。反之,为假。——简称同真,异假。即,同或:相同为一,不同为零。
2. 同或符号为⊙。(圆圈内为点)
3. 同或和异或互为非运算。
4. 同或公式:
a⊙b=ab+a'b'(a'为非a,b'为非b);
5. 同或表格(二进制
       
a
b
a⊙b
0
0
1
1
1
1
0
1
0
1
0
0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐