# 异或运算符 ^(相当于不进位的加法)
异或 ^: 位运算符号,相同的位置 0,不同的位置 1:
0^0 = 0,
1^0 = 1,
0^1 = 1,
1^1 = 0,
# 用法 1:交换两个变量的值
int a = 5; //a 二进制 0101 | |
int b = 7; //b 二进制 0111 | |
a = a ^ b; // 这时 a = 0010 | |
b = a ^ b; //b = 0101 | |
a = a ^ b; //a = 0111 | |
// 这样,这两个数就交换了 |
# 优点:增加你的不可替代性(因为别人很难看懂你的 Demo 了😂)
# 缺点:自己都看不懂了
# 用法 2:找出数组中只出现 1 次的值
这可以用在哪呢?一种乱序的进入和退出之后,判断是否全部退出时,就可以用到这种算法。
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 | |
说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? | |
例:输入 2 2 1 输出 1 ,输入 2 3 3 1 2 输出 1 | |
C语言实现: | |
int isingleNumber(int* nums, int numsSize) { | |
int result=0; | |
for(int i=0;i<numsSize;i++) | |
result^=nums[i]; | |
return result; | |
} |