c++位或和位异或



按位或"|"---有1为1
    0|0=0    ;

    0|1=1    ;

    1|0=1    ;

    1|1=1    ;
    
    按位异或"^"---相同为0,不同为1

    0^0=0    ;

    0^1=1    ;
    1^0=1    ;
    1^1=0    ;
### 3.1 异运算符的使用与特性 在 C++ 中,异运算符 `^` 是一个按逻辑运算符,用于比较两个操作数的对应。如果对应的两不同,则结果为 `1`;如果相同,则结果为 `0`。该运算符广泛应用于操作、数据加密、错误检测交换变量值等场景。 异运算具有以下特性: - **自反性**:一个数对同一个数异两次后结果不变,即 `a ^ b ^ b == a` [^4]。 - **交换律**:`a ^ b == b ^ a`。 - **结合律**:`(a ^ b) ^ c == a ^ (b ^ c)`。 - **清零性质**:任何数与自身异结果为 `0`,即 `a ^ a == 0`。 #### 示例代码: ```cpp int a = 5, b = 3; a = a ^ b; // a = 6 (0110) b = a ^ b; // b = 5 (0101) a = a ^ b; // a = 3 (0011) // 此时 a = 3, b = 5,实现了不使用临时变量的值交换 ``` 异运算可用于实现无需中间变量的数值交换,也可以用于翻转特定比特。 --- ### 3.2 同运算的含义与实现方式 C++ 标准中没有直接提供“同”(XNOR)运算符,但可以通过组合逻辑运算实现其功能。同运算是异的逻辑补集,即当两个输入相同时输出为 `1`,否则为 `0`。因此,可以使用 `~(a ^ b)` 来模拟同操作。 同运算的特点是: - 当两个相同时,结果为 `1`。 - 当两个不同时,结果为 `0`。 #### 示例代码: ```cpp uint8_t xnor(uint8_t a, uint8_t b) { return ~(a ^ b) & 0xFF; // 使用掩码确保只保留低8 } ``` 上述函数通过先执行异操作再取反,并与 `0xFF` 做按与操作来保证结果仅限于 8 。 --- ### 3.3 异与同的应用场景对比 异运算因其独特的性质,在实际编程中有广泛用途: - **数据加密**:利用异的可逆性进行简单的加解密操作。 - **错误检测与校验码生成**:例如 CRC 校验中的部分计算过程。 - **状态切换与标志管理**:通过异可以快速翻转某些特定的状态。 - **去重与查找唯一元素**:如在数组中找出只出现一次的数字,通常会用到异累加的方法 [^3]。 同则主要用于: - **一致性检查**:判断两个数据块是否完全一致。 - **图像处理与模式识别**:在某些算法中用于匹配相似特征。 - **逻辑电路设计**:作为基本门电路之一,在硬件描述语言中有直接支持。 --- ### 3.4 总结与扩展思考 异都属于按逻辑运算,但在语义应用场景上有明显区别。由于 C++ 没有内置的同运算符,因此需要借助其他运算组合实现。相比之下,异因其简洁性高效性更常被用于实际开发中。 掌握这些基础操作有助于优化程序性能并提升代码质量,尤其是在系统级编程、嵌入式开发等领域具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值