异或“∧”运算的作用

异或:相同为0,不同为1

异或运算符∧也称XOR运算符。

它的规则是若参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。

即0∧0=0,0∧1=1,1∧1=0。如: 即071∧052,结果为023(八进制数)。

“异或”的意思是判断两个相应的位值是否为“异”,为“异”(值不同)就取真(1),否则为(0)。

  下面举例说明∧运算符的应用:

  (1)与1相∧,使特定位翻转

  假设有01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算,即 

结果值的低4位正好是原数低4位的翻转。要使哪几位翻转就将与其∧运算的该几位置为1即可。这是因为原数中值为1的位与1进行∧运算得0,原数中的位值0与1进行∧运算的结果得1。

  (2)与0相∧,保留原值

  如012∧00=012

因为原数中的1与0进行∧运算得1,0∧0得0,故保留原数。

  (3)交换两个值,不用临时变量

  假如a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:

  a=a∧b;
  b=b∧a;
  a=a∧b;

  可以用下面的竖式来说明,即等效于以下两步:

  ① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。而b∧a∧b等于a∧b∧b。b∧b的结果为0,因为同一个数与本身相∧,结果必为0。因此b的值等于a∧0,即a,其值为3。

  ② 再执行第三个赋值语句:a=a∧b。由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b,等于b。

  a得到b原来的值。
--------------------- 
原文:https://blog.youkuaiyun.com/jiangqin115/article/details/44101027 
 

### 关于异或运算 (XOR) 的法则与使用 #### 异或运算的基础定义 异或运算(XOR, exclusive OR)是一种逻辑运算,在离散数学中有重要应用,同时也广泛应用于计算机科学中的位运算场景。其核心特性在于比较两个输入值的差异性:当且仅当两个输入不相同时,输出为 `true` 或者数值上的 `1`;反之,则输出为 `false` 或者数值上的 `0`[^1]。 具体来说,对于二进制数而言,异或运算遵循以下规则: - 如果两比特相同,则结果为 `0`; - 如果两比特不同,则结果为 `1`。 这可以通过真值表来直观展示: | A | B | A ⊕ B | |---|---|-------| | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 1 | 1 | 0 | 此表格展示了基本的布尔代数性质,并适用于任何基于二进制系统的计算环境[^3]。 #### 数学表达形式 从理论角度看,异或操作可以用其他基础逻辑门组合实现,即 `(¬A ∧ B) ∨ (A ∧ ¬B)` 表达式描述了如何通过 AND 和 NOT 来构建 XOR 功能[^1]。然而实际编码过程中通常会直接调用内置支持的操作符简化开发流程。 在大多数现代编程语言中,比如 C/C++/Java/Python 等主流高级程序设计工具里,都提供了专门针对整型数据类型的按位异或指令——'^' 符号代表执行逐位对比并返回新数值的结果[^3]。 #### 实际应用场景举例说明 以下是几个典型例子演示了该技术的实际用途: ##### 数据加密解密过程 由于每一个单独元素经过两次连续相同的变换之后能够恢复原始状态这一独特属性使得它非常适合用来完成简单快速的信息保护工作。 ```python def encrypt_decrypt(data_byte, key_byte): """ 对单字节进行加解密 """ return data_byte ^ key_byte original_data = ord('A') # 原始字符 'A' key = ord('*') # 密钥 '*' encrypted = encrypt_decrypt(original_data, key) # 加密处理 decrypted = encrypt_decrypt(encrypted, key) # 解密还原 print(f"Original: {chr(original_data)}, Encrypted: {hex(encrypted)}, Decrypted: {chr(decrypted)}") ``` ##### 查找数组唯一未重复项 给定一组含有偶数次出现以及恰好存在一个奇次数呈现的目标列表时,利用这种技巧可以高效定位那个特别存在的成员而无需额外存储空间消耗。 ```c++ #include <iostream> using namespace std; int findSingle(int nums[], int n){ int res = 0; for(int i=0;i<n;i++) { res ^=nums[i]; } return res; } // 测试函数... ``` 以上代码片段分别采用了 Python 及 C++ 编写的解决方案实例化讲解了上述两种常见情况下的运用方式[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值