不使用额外空间实现两个变量(int 型)的交换
2013-08-16 21:34
429 查看
这个问题不难,主要有两种方式实现。
1):用“加减”运算实现
2):用“异或”运算实现
这里简单的介绍一下“异或”运算符:(这里用的便是第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.“同或”是一个数学运算符。他应用于逻辑运算。 其运算法则为a同或b=ab+a‘b’(a'为非a)。
真“同或”假的结果是假,假“同或”真的结果也是假,真“同或”真的结果是真,假“同或”假的结果是真。就是说两个值相同,则同或结果为真。反之,为假。——简称同真,异假。即,同或:相同为一,不同为零。
2. 同或符号为⊙。(圆圈内为点)
3. 同或和异或互为非运算。
4. 同或公式:
a⊙b=ab+a'b'(a'为非a,b'为非b);
5. 同或表格(二进制)
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 |
相关文章推荐
- 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
- 不用额外空间实现两个变量(int 型)的交换
- 如何交换两个int值,而不使用额外的空间
- 实现两个int变量的值的交换,要求不使用临时变量。
- 不使用第三个变量实现交换两个变量的值和<你的名字>
- 交换两个变量的值,不使用第三个变量的方法及实现
- Java-实现两个int类型变量值的交换,要求不使用中间变量
- 不占用额外空间 交换两个变量的值
- 实现两个int类型变量值的交换,要求不使用中间变量
- 不使用第三个变量,实现两个变量值的交换
- 使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
- java算法4~交换两个整数,不能使用任何额外的变量
- 声明两个变量:int n1=10,n2=20;要求将两个变量交换,最后输出n1为20,n2为10。扩展(*):不使用第三个变量如何交换?
- 算法研究之不使用临时变量实现两个值的交换
- 如何在不使用第三方变量的前提下,交换两个变量的值 (Java实现)
- 不使用第三个变量实现两个整数之间的交换
- 交换两个变量的值,不得借助额外的存储空间,还有哪些方法?
- 交换两个变量的值,要求不使用第三个变量实现
- C#复习_不使用第三个变量交换两个int类型变量的值
- PHP 不使用第三个变量实现交换两个变量的值