不使用中间变量交换两变量a、b的值 (Java)

不使用中间变量交换两变量(异或运算)

一、异或XOR

异或运算符(^)是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0 (任何数与0异或等于其自身)

例如:(1011)2 ^ (1001)2 = (0010)2

异或运算也是一种简单的加密算法。

例如:
原文:100101
密钥:101110
对原文加密即用 原文与密钥异或运算可得到密文
原文^密钥=密文:001011
对密文解密即用 密文与密钥异或运算可得到原文
密文^密钥=原文:100101

代码演示:

		//原文
		int text = 37;//二进制为100101
		String str_text = Integer.toBinaryString(text);
		//密钥
		int key = 46;//二进制为101110
		String str_key = Integer.toBinaryString(key);
		//密文
		int ciphertext;
		ciphertext = text ^ key;
		String str_cip = Integer.toBinaryString(ciphertext);
		System.out.println("2进制输出各数:");
		System.out.println("原文:"+str_text);
		System.out.println("密钥:"+str_key);
		System.out.println("密文:"+"00"+str_cip);
		//用密文异或密钥得原文
		ciphertext = ciphertext ^ key;
		str_cip = Integer.toBinaryString(ciphertext);
		System.out.println("还原:"+str_cip);

执行效果:

2进制输出各数:
原文:100101
密钥:101110
密文:001011
还原:100101

二、使用异或运算(^)交换变量

如果给定整数a和b,用以下三行代码即可交换a和b的值。

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

对于三行代码的理解:

  • 假设a异或b的结果记为c,c就是a整数位信息和b整数位信息的所有不同信息。
    比如,a=4=100,b=3=011,a^b=c=111。
  • a异或c的结果就是b。比如a=4=100,c=111,a^c=011=3=b。
  • b异或c的结果就是a。比如b=3=011,c=111,b^c=100=4=a。

所以,在执行完上面三行代码之前,假设有a信息和b信息。执行完第一行代码之后,a变成了c,b还是b;执行完第二行后,a仍然是c,b变成了a;执行完第三行代码之后,a变成了b,b仍然是a。过程结束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值