在论坛的帖子里看到一个面试题,交换两个整数。以往知道的方法有两种,一是使用临时变量temp,二是两个整数相加减的算法。在帖子里发现了第三种算法,异或运算:
a=a^b;
b=b^a;
a=b^a;
一时好奇,研究了一下,得出本文。
异位运算交换两个整数的算法原理。
交换两个整数常规的实现就是使用临时变量,异位运算交换两个整数不需要临时变量,其实是把临时变量与其中的一个整数结合起来了,也就是说把其中的一个整数当做临时变量来用,这一点与两数相加减的算法是一到致的。下面讲讲原理。
异或运算有两个特性:
1、一个数异或本身恒等于0,如5^5恒等于0;
2、一个数异或0恒等于本身,如5^0恒等于5。
交换两个整数a和b,无非是a=b和b=a这两个操作,当然,你不能直接这么做。该怎么变呢?
算式一:a=b^(a^a)=a^(a^b);
算式二:b=a^(b^b)^(a^a)=a^(a^b)^(a^b);
注意上面算式二中的a还是原来的a,不要认为是改变后的a。
为什么右边的式子都留个a,没为什么,我就是想把b做为临时变量来用,此处要注意,既然做为临时变量用那么b就是最后才计算出来的数。接下来认真的分析下上面的两个算式。得出以下java语句:
把a^b做为临时变量值赋给b(临时变量),得
b=a^b;
计算出a:
a=a^b;注意这时的b可就是上面的式子已改变过的b了。
计算出b:
b=a^b;注意仔细观察上面的式二。
至此完成了两个整数的交换。
Test4.java
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
new Test4().swap(5, 3);
}
/**
* 异位运算交换两个整数
* @param a
* @param b
*/
public void swap(int a ,int b){
System.out.println(" a = " + a );
System.out.println(" b = " + b );
// 写法一:以a作为临时变量
// a=a^b;
// b=b^a;
// a=b^a;
// 写法二:以b作为临时变量
b=a^b;
a=a^b;
b=a^b;
System.out.println(" a = " + a );
System.out.println(" b = " + b );
}
}
分享到:
相关推荐
可进行十六进制字符串按位异或运算,就是输入十六进制数,每个十六进制数间输入空格,然后点输出即可得到结果
异或运算 进行加密 delphi编写异或运算 进行加密 delphi编写异或运算 进行加密 delphi编写异或运算 进行加密 delphi编写异或运算 进行加密 delphi编写异或运算 进行加密 delphi编写异或运算 进行加密 delphi编写异或...
不要采用异或来交换两个变量。
异或运算,传入两个数据进行异或运算。得到相应的数据
加密解密 (利用异或运算) 进行异或加密解密运算
用于计算十六进制的异或运算,内含源文件以及执行文件
异或运算加密(Delphi) 一个Delphi写的异或加密解密工具
基于BP网络的异或运算多阈值神经元的实现 基于BP网络的异或运算多阈值神经元的实现 毕业论文专用
最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或...
题目描述:给你n个正整数,你要找出哪两个数按位异或运算后的结果是最大的。 输入:输入一个整数n(2<=n<=100000),然后就是n个109以内的正整数。 输出:输出最大的按位异或运算结果。 样例输入: 4 1 3...
异或运算加密,开发环境vs2013,仅支持整型数据加密,能够实现加密和解密。
异或运算的真值表,例子展示异或运算 该资源仅供学习!!!
奇偶校验的基本运算是异或运算。实现这一功能的电路称为奇校验电路;输出端加一个非门,则可得到偶校验电路。通常合二为一,称为奇偶校验电路。
异或运算在卡诺图中的表示方法,将他们紧密的联系在一起。
可以在训练后得到稳定权值,进行异或运算,训练的次数在2000左右,用c语言实现。
异或校验工具。十六进制异或值计算。。。。。。。。。。
282-用P0口显示按位异或运算结果(51单片机C语言实例Proteus仿真和代码)282-用P0口显示按位异或运算结果(51单片机C语言实例Proteus仿真和代码)282-用P0口显示按位异或运算结果(51单片机C语言实例Proteus仿真和代码)...
例⼀:在不引⼊第三个变量的情况下,两个变量的值(整数) //交换a、b的值 例⼆:判断奇数偶数更简单更⾼效的做法 //这个实际考的不多, 太简单 //思路:奇数的⼆进制最低为⼀定为1,偶数的⼆进制最低位⼀定为0, a^...
陈硕 (giantchen_AT_gmail)
。