位运算-异或(^)

1 基本概念

1.1 符号

异或是一种二进制的位运算,符号以 XOR 或 ^ 表示。

1.2 运算规则

相同为0,不同为1,即(可以看做二进制下的不进位加法)

1 ^ 1 = 0

0 ^ 0 = 0

1 ^ 0 = 1

1.3 运算性质

  • 交换律: A ^ B = B ^ A

  • 结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )

  • 自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)

  • x ^ x = 0 , x ^ 0 = x

  • x ^ -1 = ~x

2 运用

2.1 变量交换

// 常规方法
int tmp = a;  // temp = 3
a = b;         // a = 7
b = tmp;      // b = 3
 
// 异或方法
a = a ^ b;  // a = 3 ^ 7
b = a ^ b;  // b = (3 ^ 7) ^ 7 = 3 ^ (7 ^ 7) = 3
a = a ^ b;  // a = (3 ^ 7) ^ (3 ^ 7 ^ 7) = (3 ^ 3) ^ (7 ^ 7) ^ 7 = 7 

2.2 排除偶次重复

示例:在一个整数数组中,仅存在一个不重复的数字,其余数字均出现两次(或偶数次),找出不重复数字。

// 常规方法:通过二次循环找出不重复的数字
for (...) {
    for (...) {
        ...
    }
}
 
// 异或方法:将所有整数异或,出现偶数次的整数会被抵消,最终留下不重复整数。
int ans = 0;
for (int i = 1; i <= n; i++) {
    ans = ans ^ num[i];
}
return ans;

参考文献

作者:wh1sky

出处:https://www.cnblogs.com/wh1sky/p/18101451

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Wh1sky  阅读(61)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示