【C++】异或运算

本文介绍了两个数进行异或运算的基本概念,提供了代码示例(ans=i^j),并详细阐述了异或运算的性质,如与0的运算结果、自异或为0以及满足交换律和结合律的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个数进行异或运算,若两数相同为0,不同为1

假设i和j进行异或运算,则代码写法为:

ans = i ^ j;

异或预算的性质:

  1. 任何数和 000 做异或运算,结果仍然是原来的数,即 a⊕0=a。
  2. 任何数和其自身做异或运算,结果是 000,即 a⊕a=0。
  3. 异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。

### C++异或运算符的使用方法 #### 基本概念 C++ 的按位异或运算符 `^` 是一种二元运算符,作用是对两个整型操作数的每一位执行异或逻辑运算。如果对应的两位不同,则结果为 1;否则为 0[^4]。 #### 运算规则 对于任意两个二进制位 A 和 B: - 当 A 和 B 不相同时,结果为 1; - 当 A 和 B 相同时,结果为 0。 例如: ```cpp // 示例:基本异或运算 int a = 5; // 二进制表示为 0101 int b = 3; // 二进制表示为 0011 int result = a ^ b; // 结果为 0110 (十进制值为 6) ``` 上述代码中,变量 `result` 存储的是 `a` 和 `b` 按位异或后的结果。 #### 复合赋值运算符 除了单独使用的 `^` 运算符外,还可以将其与赋值运算符组合成复合赋值形式 `^=`。此形式的作用是将左操作数与右操作数进行按位异或后再赋值给左操作数[^2]。 示例代码如下: ```cpp int c = 7; // 初始值为 7 (二进制 0111) c ^= 3; // 等价于 c = c ^ 3 // 计算过程:0111 ^ 0011 -> 0100 (十进制值为 4) ``` #### 应用实例:简单加密/解密 利用异或运算的特点(即两次相同的 XOR 操作会还原原始数据),可以实现简单的加密和解密功能[^3]。 以下是基于异或运算的加解密函数实现: ```cpp #include <iostream> #include <string> std::string Encrypt(const std::string& input, char key) { std::string encrypted = input; for(char &ch : encrypted){ ch ^= key; // 对每个字符逐位异或处理 } return encrypted; } std::string Decrypt(const std::string& encrypted, char key) { return Encrypt(encrypted, key); // 加密和解密实际上是同一个操作 } int main() { std::string original = "HelloWorld"; char secretKey = 'A'; // 定义密钥 std::string cipherText = Encrypt(original, secretKey); std::cout << "Encrypted Text: " << cipherText << std::endl; std::string plainText = Decrypt(cipherText, secretKey); std::cout << "Decrypted Text: " << plainText << std::endl; return 0; } ``` 在此程序中,定义了一个名为 `Encrypt` 的函数用来加密输入字符串,并通过指定的密钥对其进行逐字节的异或操作。由于异或运算是可逆的,因此可以通过同样的方式完成解密工作。 ### 总结 C++ 中的异或运算符不仅能够用于基础的数据位级操作,在实际开发过程中也常被应用于诸如数据校验、压缩以及简易加密等领域[^1][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值