这个问题不难,主要有两种方式实现。
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
|
有异或运算,那一定有“同或”运算:
真“同或”假的结果是假,假“同或”真的结果也是假,真“同或”真的结果是真,假“同或”假的结果是真。就是说两个值相同,则同或结果为真。反之,为假。——简称同真,异假。即,同或:相同为一,不同为零。
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
|
。。。。。