IRONSOFTWAREHOME

了解 C# 中的二进制 XOR 操作符

C# 中的二进制:10 分钟或更短时间内掌握二进制异或运算符

Tim Corey

5m 54s

二进制操作是编程的重要组成部分,尤其是在处理底层优化和位操作时。 其中一个操作是排他 OR (XOR) 操作符。 在本文中,我们将跟随 Tim Corey 的视频"The Binary XOR Operator in 10 Minutes or Less."来探索 C# 的二进制 XOR 运算符。

Tim 的视频对 XOR、其语法及其实际应用进行了出色的分解。 下面,我们将分析他的解释和示例,同时引用具体的时间戳以方便参考。

XOR 简介

Tim 在视频开头提到,这是他的 "理解 C# 中的二进制 "系列的一部分,特别是第九课。他解释说,在这一课中,他将讲授排他 OR (XOR) 运算符的工作原理,以及它如何在各种场景中发挥作用。

XOR 运算符语法和基本解释

Tim 引入了两个值 1 和 2,并将它们打印到控制台以供参考。 他删除了 32 位表示法,将重点放在标准的 8 位二进制表示法上。

在 0:31 处,他解释了 XOR 在 C# 中用护理符号 (^) 表示。 他提醒观众:

  • AND 运算符 (&) 需要两个位都为 1 才能返回 1。
  • OR 运算符 (|如果至少有一个位为 1,则返回 1。
  • XOR 运算符 (^) 只有在两个位中有一个位为 1 时才返回 1,而不是两个位都为 1。

Tim 进一步解释了每个位比较的规则:

-1 XOR 0 = 1 -0 XOR 1 = 1 -1 XOR 1 = 0 -0 XOR 0 = 0

这意味着 XOR 是两个值之间的差异检测器

在C#代码中演示XOR

Tim 通过定义一个 uint 变量,该变量保存两个值按位异或的结果,转到一个实际的例子:

// Define two sample values
uint val1 = 0b0001;  // 1 in decimal
uint val2 = 0b0010;  // 2 in decimal

// Perform XOR operation between val1 and val2
uint result = val1 ^ val2;

// Print the resultant binary value of XOR operation
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));

然后,他将结果打印到控制台并记录输出:

0000 0011
Text

该输出突出表明,XOR 只保留其中一个原始值为 1 的位,而不是两个原始值都为 1 的位。

使用 XOR 进行值比较

Tim 现在演示 XOR 的一个实际用途:检查两个值是否相同。

在3:00时,他修改了数值,使 val1val2 完全相同:

// Initialize val1 and val2 to the same value
uint val1 = 0b10011001;
uint val2 = 0b10011001;

// Perform XOR operation to check for identical values
uint result = val1 ^ val2;

// Output will be zero if both values are identical
Console.WriteLine(Convert.ToString(result, toBase: 2).PadLeft(8, '0'));

当他执行 XOR 运算时,结果是

0000 0000
Text

蒂姆解释说,XOR 结果为 0 表示值完全相同。 这使得 XOR 成为比较两个数字是否相等的快速方法。

XOR 用于识别差异

在4:00时,Tim 展示了另一个 val1val2 略有不同的案例。 这一次,XOR 产生了非零结果,表明值之间存在差异。

这种方法在有效比较大的二进制值时非常有用,因为 XOR 只需一步就能突出差异。

在没有临时变量的情况下交换两个变量的 XOR.

蒂姆介绍了一个经典的编程技巧:在不使用临时变量的情况下交换两个数字。

在5:40时,他挑战观众在不声明额外变量的情况下交换 val1val2。 该解决方案使用了三次 XOR:

// Original values
uint val1 = 0b0010; // 2 in decimal
uint val2 = 0b0100; // 4 in decimal

// Swap the values using XOR
val1 = val1 ^ val2;
val2 = val1 ^ val2;
val1 = val1 ^ val2;

// After swap: val1 = 4, val2 = 2
Console.WriteLine($"val1: {val1}, val2: {val2}");

他介绍了整个过程:

  1. val1 存储了 val1 ^ val2 ,这意味着它现在包含了两者的组合值。
  2. val2 通过再次与 val1 执行异或运算更新,仅留下原始的 val1 值。
  3. val1 再次被异或,仅留下原始的 val2 值。

在7:30时,Tim 打印交换后的值,并确认 val1val2 已成功交换值。

了解二进制表示法中的 XOR.

为了加深理解,Tim 运行了二进制版本的交换操作,展示了每个 XOR 步骤对比特的影响。 他强调,只有在必要时,每个比特才会翻转,因此 XOR 是一种高效的数值交换方式。

结论

最后,Tim 强化了核心要点:

  • XOR 返回 1 只有当其中一个比特正好为 1 时
  • 它可用于高效地比较数值
  • 它有助于在没有第三个变量的情况下交换两个值,使其成为编码挑战中的一个便捷技巧。

他鼓励观众尝试使用 XOR,并将其应用到实际问题中,以加深理解。

最后的想法

Tim Corey 的视频对 C# 中的 XOR 进行了出色而简明的分解。 通过一步一步地举例说明,他展示了运算符在比较、差异甚至值交换方面的实用性。

如果您对二进制操作或位运算技巧感兴趣,这是一个必须观看的视频,可以加强您对 C# 二进制操作的理解。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户