两个数不通过中间变量交换值的原理分析!
2010-12-05 15:03
253 查看
public class num{ public static void main(String args[]){ int i=10; int j=5; i=i^j; j=i^j; i=i^j; System.out.println("i:"+i); System.out.println("j:"+j); } }
最简单的代码就该这样写了吧?
或许对于像我现在这样的初学者很多都没见过这个符号 ^
这个是个异或运算的符号,好的,我们现在开始分析它的运行原理!
异或运算的知识请点击此连接后了解
http://baike.baidu.com/view/1452266.htm
将i和j的初始值给2进制化后
分别为
10 -- 0
5 -- 1
2 -- 0
1
10的二进制就为1010
-----------------------------
5 -- 1
2 -- 0
1
5的二进制就为 101
第一步:
i=i^j;
好了,我们将2个数都转换成了二进制后
在把他们异或运算下
1010
0101 --- 补0
1111 --- 或运算的结果
再把二进制的1111转换成十进制的
1*2^3+1*2^2+1*2^1+1*2^0
8+4+2+1=15
现在的i的值就等于15了
第二步:
j=i^j;
1111
0101
1010
再把二进制的1010转换成十进制的
1*2^3+0*2^2+1*2^1+0*2^0
8+0+2+0=10
现在j的值就等于10了
第三步:
i=i^j;
1111
1010
0101
现在i的值就等于5了
最后就成功的将i和j的值给交换了!
相关文章推荐
- 运用异或运算实现两个数不通过中间变量交换值的原理分析
- 不通过中间变量 交换两个数的值
- C#中匿名方法变量共享原理分析
- 通过协议分析理解端口扫描原理
- c语言不用临时变量交换两个数程序分析
- Afinal的IOC原理-通过注解方法是绑定UI和事件源码分析
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- HashMap实现原理分析--通过面试题深入理解
- 从恶意软件获得的新姿势——通过rundll32.exe执行js原理详细分析
- 由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理
- 两个变量a,b,不用“if”,“? :”,switch或者其它判断语句,找出两个数中间比较大的
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 【C】辗转相除法求两个数的最大公约数,利用位运算交换两个数无须中间变量
- 通过源码分析MyBatis的缓存/Mybatis解析动态sql原理分析
- 语义分析和中间代码生成——哈工大编译原理课程(三)
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 编译原理-词法分析-语法分析-语义分析生成中间代码-python版
- [IMX6Q]u-boot环境变量原理分析
- C++交换两个数的值,不需要中间变量
- 由浅入深分析mybatis通过动态代理实现拦截器(插件)的原理