小编通过短视频平台学习的一个问题的解决方法,题目是听起来很简单,但思考起来有一定的技术含量在里面的。
题目:以知 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);
}
}
运算出的结果为:
谢谢大家的观看,如果觉得对自己有用的话请一键三连呦,如果觉得本文在那些方面有问题,麻烦给我留言,我会积极的更正的。