不使用额外空间实现两个变量(int 型)的交换
来源:互联网 发布:龙城飞将 知乎 编辑:程序博客网 时间:2024/06/06 04:02
这个问题不难,主要有两种方式实现。
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
- 不使用额外空间实现两个变量(int 型)的交换
- 不占用额外空间 交换两个变量的值
- 用位运算实现两个变量交换值(不需额外空间)
- 深入理解异或运算 xor 的含义——再探不使用加减乘除实现加法运算、不使用额外空间交换两个变量的值
- 不使用额外空间来交换两个数
- 在不使用额外空间,交换两个数
- 不使用中间变量,交换int型的 a, b两个变量的值
- 不使用中间变量,交换int型的 a, b两个变量的值
- 不使用中间变量,交换int型的 a, b两个变量的值。
- 实现两个int类型变量值的交换,要求不使用中间变量
- Java-实现两个int类型变量值的交换,要求不使用中间变量
- 实现两个int类型变量值的交换,要求不使用中间变量
- 不使用中间变量实现两个变量的交换
- 不使用中间变量实现两个变量的交换
- Maria840js面试题:不使用中间变量,交换int型的 a, b两个变量的值
- 不使用第三个变量交换两个int类型变量的值
- C#复习_不使用第三个变量交换两个int类型变量的值
- 不使用中间变量,实现两个变量值的交换
- 树状数组
- djanglebook
- Pieces(hdu4628,状态压缩的动态规划)
- Android-GPS定位
- SRM 588 D2 L2:GUMIAndSongsDiv2,冷静思考,好的算法简洁明了
- 不使用额外空间实现两个变量(int 型)的交换
- 泰山挑夫【三】解题报告
- 循环右移字符串简易探讨
- Sad Love Story(hdu4631,模拟+set容器)
- 创建一个和已知表相同的表
- 大数据相乘
- 求数组中和最大的子数组与始末下标
- 理解WebKit和Chromium:Chromium资源磁盘缓存
- Balls Rearrangement(hdu4611,模拟+数学)