Оператор Xor (Visual Basic)

Выполняет логическое исключение для двух выражений или побитового исключения для двух Boolean числовых выражений.

Синтаксис

result = expression1 Xor expression2  

Детали

result
Обязательный. Любая Boolean или числовая переменная. Для логического сравнения result является логическим исключением (исключающее логическое отсоздание) двух Boolean значений. Для побитовых операций result — это числовое значение, представляющее побитовое исключение (эксклюзивное побитовое разбиение) двух числовых битовых шаблонов.

expression1
Обязательный. Любое Boolean или числовое выражение.

expression2
Обязательный. Любое Boolean или числовое выражение.

Замечания

Для логического сравнения используется resultTrue значение if и только в том случае, если именно одно из expression1 и expression2 оценивается True. То есть, если и только если expression1 и expression2 оценить противоположные 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 Для побитового сравнения результирующий тип данных является числовым типом, подходящим для типов expression1 данных и expression2. См. таблицу "Сравнения реляционных и битовых" в типах данных операторов.

Перегрузка

Оператор 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

В предыдущем примере приводятся результаты False, Trueа Falseтакже соответственно.

Пример 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 соответственно.

См. также