异或操作
2021/9/29 6:10:55
本文主要是介绍异或操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
异或操作
^
异或操作基本的性质:
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 0
0 ^ 1 = 1
不同才为1;
具体如下:
1011010 ^ 1101100 = 0110110
而这个操作,可以看做:无进位加法
即上述异或操作按位相加不进位:1+1=0;0+0=0;1+0=1;0+1=1;
且异或操作满足交换律和结合律:
- a ^ b = b ^ a
- ( a ^ b ) ^ c = a ^ ( b ^ c )
- a ^ a = 0
- a ^ 0 = a
由此可以得出,一大坨数进行异或操作,不论谁先异或谁,其最后的结果都是一样的。
在这个交换2个数的Java代码中:
public static void Swap(int[] a,int i,int j){ // int temp; // temp = a[i]; // a[i] = a[MinIndex]; // a[MinIndex] = temp; a[i] = a[i] ^ a[j]; a[j] = a[i] ^ a[j]; a[i] = a[i] ^ a[j]; }
原写法是定义一个临时变量temp,来进行交换。(很常规)
下面的写法是利用了3个异或操作完成了交换,且没有额外分配空间。
- a[i] = a[i] ^ a[j],此时a[i]结果为异或后的值
- a[j] = a[i] ^ a[j],即a[j] = a[i] ^ a[j] ^ a[j],因为a[j] ^ a[j] 为0,所以此时a[j] = a[i];此a[i]为初始传入值,而现在的a[i]还为:a[i] ^ a[j]
- a[i] = a[i] ^ a[j],即a[i] = a[i] ^ a[j] ^ a[i],所以a[i] = a[j],完成了交换。
这篇关于异或操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)