疑问:交换两个数的若干问题
来源:互联网 发布:dbc数据库保存 编辑:程序博客网 时间:2024/06/03 18:36
涉及交换两个数的问题中,有三种解决方法:
A:利用第三变量temp
B:利用加减法,如
A=A+B;
B=A-B;
A=A-B;
C:第三种是利用位^(异或运算符)运算,如
public static void main(String[] args) {
int a = 2;
int b = 4;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println(a);
System.out.println(b);
}
第三种方法不明白为什么,所以我调试了下程序,
我们可以看到,经过了a=a^b;这步,a已经发生了变化,
a:0000 0000 0000 0010
^
b:0000 0000 0000 0100
=
a:0000 0000 0000 0110
所以结果就是6,再接下来
可以看到,b也发生了变化
a:0000 0000 0000 0110
^
b:0000 0000 0000 0100
=
b:0000 0000 0000 0010
上面的结果其实可以发现一些细节,其实是巧妙借用了异或运算进行变换,
那么问题来了,怎么个巧妙法?
第一步,它先用异或运算把两个值的不同点都拿出来,
第二步,再用异或运算把第一步的结果减去b,得出的就是a了吧,(即是b=a)
那么,这时就可以推断出第三步了,
第三步,第一步结果减去b(原来的a值),那么就是b.
a也再次发生变化
a:0000 0000 0000 0110
^
b:0000 0000 0000 0010
=
b:0000 0000 0000 0100
总结:从上面可以看出,其实就是相当于第二种方法了,
先把两个数加起来,然后减去第一个数,再减去第二个数。
为了验证我的总结,直接调试了下结果,
结果正确~
故此,两数交换的原理也掌握清楚。
- 疑问:交换两个数的若干问题
- 两个数的交换
- 两个数的交换
- 两个数的交换
- 两个数的交换
- 交换两个数的位置
- 交换两个数的值
- 交换两个数的值
- 交换两个数的算法
- 关于两个数的交换
- 交换两个数的值
- 交换两个数的值
- 交换两个数的值
- 交换两个数的值
- 交换两个数的值
- 交换两个数的值
- 交换两个数的方法
- 交换两个数的位置
- 质数
- C# Random.Next
- java中finally语句是否一定会被执行
- 分布式消息系统kafka 初级教程
- 海量数据top排序
- 疑问:交换两个数的若干问题
- linux脚本基础篇--21条入门学习笔记
- 具有跳跃性思维的算法
- 补间动画详解四 平移动画TranslateAnimation
- 深度学习目标检测算法——Faster-Rcnn
- Ajax封装
- MVC设计模式
- c++中的const解析
- iOS的MVC模式