论坛首页 招聘求职论坛

今天去面试了一次。。悲剧了。。大家帮看看这题

浏览 25572 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2011-07-12  
二楼正解啊
0 请登录后投票
   发表时间:2011-07-12  
有什么意义? 意义有多大?
0 请登录后投票
   发表时间:2011-07-12  
lyw985 写道
jancy 写道
zhangyang6380006 写道
我记得我上次面试也问了这个,我当时顿住了,10钞后想出来了,没有第三变量,必然是两个变量相加和相减操作,a=a+b;b=a-b;a=a-b;

如果2个变量都是数字,这样可以
字符串的话,就不行了。
这样比较通用:
b ^= a ^= b ^= a;


写这么复杂。。。。。

实际上就是异或操作

a=a^b;
b=b^a;
a=b^a;

此乃正解 呵呵
0 请登录后投票
   发表时间:2011-07-12  
lyw985正解!!!

通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:

    a=10100001,b=00000110

    a=a^b;   //a=10100111

    b=b^a;   //b=10100001

    a=a^b;   //a=00000110
0 请登录后投票
   发表时间:2011-07-12  
package rtx.java;

public class XOR {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		int c=3,d=5;
		swap(c,d);
		System.out.println(c+";"+d);
	}
	
	public static void swap(int a, int b){
		System.out.println(a+","+b);
		a	= a^b;
		b	= b^a;
		a	= a^b;
		System.out.println(a+","+b);
	}
}

结果:
3,5
5,3
3;5
0 请登录后投票
   发表时间:2011-07-12  
这题考得有什么用吗
0 请登录后投票
   发表时间:2011-07-12  
哥记得大三下学期要实习时,有一公司来我们学校招实习生,考的其中一道就是这个东东。PS,哥的专业是数学。
0 请登录后投票
   发表时间:2011-07-12  
用异或。不过搞java的面这个。。。你面的是什么职位?j2me吗?
0 请登录后投票
   发表时间:2011-07-12  
在http://my.opera.com/yjfuk/blog/?id=554783 看到这个

异或(^)运算本身固有的良好运算性质,这一性质的存在可以保证信息不丢失,而因其这种性质使得这种运算在很多环境下广泛的应用。

基于异或运算可以不用牺牲空间就完成两个变量数值交换的操作。而在编程实践中一般都会用到第三空间来保存变量,使变量在交换过程中不至于数值改变,在此统称之为信息丢失。

为什么异或运算可以不借用第三空间但不造成信息丢失呢?

这里涉及到异或运算的一个良好性质,在表述这个性质之前我们先看一个几何上的例子。

设现有二维空间中两向量A,B。为表示方便令A为X轴正方向上的向量,B为Y轴正方向上的向量。现在我们可以利用A,B两向量的向量运算很容易就得到第三个向量C,即C = A + B;这里的向量C显然是位于第一象限中的向量。至此存在三个向量,ABC,而如果ABC中任一向量信息的丢失,则可以通过另两向量进行还原。现在你应该这个例子中所透露出来的性质。

这里的异或运算同样也是跟上述例子一样。

即C=A^B;

A=C^B;

B=C^A;

正是异或运算这一良好的性质也成为了密码学的密码编码中一个最基本的运算。

现有明文P,密钥K,我们可以通过P,K经过一系列的运算过程(置换,变换,移位,异或运算)生成密文C。

对于置换,变换,移位这种类型的运算可以通过它们的逆运算进行还原,而异或运算亦可以通过上述性质进行还原,这就使得通过密钥K,密文C生成明文P成为可能。

即:C=P^K;

=》P=C^K;

注:在此提到的异或运算在密码学中的应用只是为了说明一下异或运算性质的应用环境,而真正的密码学中编码过程远比上述要复杂。
0 请登录后投票
   发表时间:2011-07-12  
这是亚信联创吧  
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics