异或运算符 (Visual Basic)

对两个 Boolean 执行逻辑异运算,或对两个数值表达式执行位异运算。

语法

result = expression1 Xor expression2  

组成部分

result
必需。 任何 Boolean 或数值变量。 对于布尔比较,result 是两个 Boolean 值的逻辑异运算(互斥逻辑析取)的结果。 对于按位运算,result 是表示两个数值位模式的按位异运算(互斥按位析取)结果的数值。

expression1
必需。 任何 Boolean 或数值表达式。

expression2
必需。 任何 Boolean 或数值表达式。

注解

对于布尔比较,当且仅当 expression1expression2 之一的计算结果为 True 时,result 才是 True。 也就是说,当且仅当 expression1expression2 的计算结果为相反的 Boolean 值。 下表说明了如何确定 result

如果 expression1 expression2 result 的值为
True True False
True False True
False True True
False False False

注意

在布尔比较中,Xor 运算符始终计算这两个表达式,这可能包括进行过程调用。 Xor 没有短路对应项,因为结果总是取决于两个操作数。 对于短路逻辑运算符,请参阅 AndAlso 运算符OrElse 运算符

对于位运算,Xor 运算符对两个数值表达式中位置相同的位进行位比较,并根据下表设置 result 中的相应位。

如果 expression1 中的位为 并且 expression2 中的位为 result 中的位为
1 1 0
1 0 1
0 1 1
0 0 0

注意

由于逻辑运算符和位运算符的优先级低于其他算术运算符和关系运算符,因此任何位运算都应括在括号中以确保准确执行运算。

例如,5 Xor 3 是 6。 若要了解原因,请将 5 和 3 转换为其二进制表示形式 101 和 011。 然后用上表确定 101 Xor 011 是否为 110,即十进制数 6 的二进制表示形式。

数据类型

如果操作数由一个 Boolean 表达式和一个数值表达式组成,则 Visual Basic 会将 Boolean 表达式转换为数值(–1 表示 True,0 表示 False)并执行位运算。

对于 Boolean 比较,结果的数据类型为 Boolean。 对于位比较,结果数据类型是适用于数据类型 expression1expression2 的数值类型。 请参阅运算符结果的数据类型中的“关系比较和位比较”表。

重载

可重载 Xor 运算符,这意味着当操作数具有某一类或结构时,该类或结构可重新定义其行为。 如果你的代码在这种类或结构上使用此运算符,请确保了解其重新定义的行为。 有关详细信息,请参阅 Operator Procedures

示例 1

下面的示例使用 Xor 运算符对两个表达式执行逻辑异运算(互斥逻辑析取)。 结果是一个 Boolean 值,该值表示其中一个表达式是否恰好是 True

Dim a As Integer = 10
Dim b As Integer = 8
Dim c As Integer = 6
Dim firstCheck, secondCheck, thirdCheck As Boolean
firstCheck = a > b Xor b > c
secondCheck = b > a Xor b > c
thirdCheck = b > a Xor c > b

前面的示例分别生成结果 FalseTrueFalse

示例 2

下面的示例使用 Xor 运算符对两个数值表达式的单个位执行逻辑异运算(互斥逻辑析取)。 如果操作数中恰好有一个对应的位被设置为 1,则会设置结果模式中的位。

Dim a As Integer = 10 ' 1010 in binary
Dim b As Integer = 8  ' 1000 in binary
Dim c As Integer = 6  ' 0110 in binary
Dim firstPattern, secondPattern, thirdPattern As Integer
firstPattern = (a Xor b)  '  2, 0010 in binary
secondPattern = (a Xor c) ' 12, 1100 in binary
thirdPattern = (b Xor c)  ' 14, 1110 in binary

前面的示例分别生成结果 2、12 和 14。

请参阅