Оператор Xor (Visual Basic)
Выполняет логическое исключение для двух выражений или побитового исключения для двух Boolean
числовых выражений.
Синтаксис
result = expression1 Xor expression2
Детали
result
Обязательный. Любая Boolean
или числовая переменная. Для логического сравнения result
является логическим исключением (исключающее логическое отсоздание) двух Boolean
значений. Для побитовых операций result
— это числовое значение, представляющее побитовое исключение (эксклюзивное побитовое разбиение) двух числовых битовых шаблонов.
expression1
Обязательный. Любое Boolean
или числовое выражение.
expression2
Обязательный. Любое Boolean
или числовое выражение.
Замечания
Для логического сравнения используется result
True
значение 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 соответственно.