跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

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

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'));
// 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

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

使用 XOR 进行值比较

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

在3:00,他修改这些值以便val2完全相同:

// 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'));
// 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

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

XOR 用于识别差异

在4:00,Tim 演示了另一个情况,即val2有细微的差别。 这一次,XOR 产生了非零结果,表明值之间存在差异。

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

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

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

在5:40,他挑战观众在不声明额外变量的情况下交换val2。 该解决方案使用了三次 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}");
// 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值。
  3. val1 再次被异或,只剩下原来的val2值。

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

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

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

结论

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

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

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

最后的想法

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

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

Hero Worlddot related to 了解 C# 中的二进制 XOR 操作符
Hero Affiliate related to 了解 C# 中的二进制 XOR 操作符

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我