异或技巧
交换
交换int a 和 int b的位置
1 | int a = 10; |
a和b不能是同一个数(内存意义上),否则结果会是0
数组查找一个有奇数个的数字(其余全偶数个)
^具有交换律:a ^ b = b ^ a- 偶数个某数异或等于0:
a ^ a ^ a ^ a = 0 - 奇数个某数异或等于本身:
b ^ b ^ b = b
1 | void printOddTimesNum1(int[] arr){ |
- 时间复杂度:
- 空间复杂度:
查找两个有奇数个的数字
1 | void printOddTimesNum2(int[] arr){ //arr中有奇数个a和奇数个b |
- 其中
int rightOne = eor & (~eor + 1);的原理:- 假设a = 1101110010
b = 0010101010 eor= 1111011000~eor= 0000100111~eor + 1= 0000101000eor & (~eor + 1)= 0000001000
- 假设a = 1101110010
- Title: 异或技巧
- Author: SyEic_L
- Created at : 2025-09-19 18:52:04
- Updated at : 2025-09-19 18:52:04
- Link: https://blog.syeicl.vip/2025/09/19/异或技巧/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments