简单的细节题 不新建对象通过异或进行数值交换

小编通过短视频平台学习的一个问题的解决方法,题目是听起来很简单,但思考起来有一定的技术含量在里面的。

题目:以知 int a = 10; int b = 20;  我们要怎样在不新建中间变量的情况下交换ab的值?

这里我们就引入一个计算方法叫 “异或运算”,那什么叫“异或”呢?

我们在学java基础时,老师肯定讲过,“与” 、“或”、 “非”、“异或”。那么本次所运用的就是“异或”。

异或的基本运算就是,相同为真,不同为假。

 

       这个就是简单的异或运算,异或也是一个较为简单的加密方式。

我们可以把①作为原文,②作为密钥,③作为密文。

这里我们还要知道的是 密文③再与密钥②进行异或运算得到的就是原文①

如图:

这样就可以通过密文与密钥进行异或运算得出原文的值

那么本次小题就是运用这样的原理,我们不必思考两个整数在异或云算是怎么算的,我们只需要得到想要值就可以了。 

public class BubbleSort {
	public static void main(String[] args) {		
        int a = 10;
		int b = 20;
		System.out.println("a= "+a+"  "+"b="+b);
		a = a ^ b;
/*如果我们把a当成原文,b当成密钥,将结果赋值给
a那么a就成为密文。
*/
		b = a ^ b;
/*密钥与密文进行异或运算就得出了原文a也就10然后
赋值给b那么b就等于10,这样我们就将原a的值给了b
那么怎样才能,把原b的值给a呢?
*/
		a = a ^ b; 
/*我们再看第一次异或运算,如果我们将b作为原文,a作为密
钥那么我们只要再进行一次异或原a的值就可以得出原文b的值,
也就是20。原a的值现在等于b那么我们就再将a异或b一次得出
的是20我们将其赋值给a这样就达成了我们目的
*/
		System.out.println("a= "+a+"  "+"b="+b);	
    }
}
	

运算出的结果为:

谢谢大家的观看,如果觉得对自己有用的话请一键三连呦,如果觉得本文在那些方面有问题,麻烦给我留言,我会积极的更正的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值