17 декабря 2008

Logical XOR operator in C++

Понадобилось использовать оператор logical XOR и... поначалу не нашел я его в С++. В смысле не нашел оператора, на котором написано "logical XOR". А вообще оператор есть: !=.

10 комментариев:

Dragon комментирует...

Только логические выражения в которых написано наподобие a != b, где a и b логические переменные, выглядят непонятно. :-(
Я поэтому стараюсь избегать его использования.

White Knight комментирует...

А чем плоха конструкция:
!(a && b) && (a || b)
?

Raider комментирует...

White Knight: да слишком уж она громоздка, читать неудобно и писать тоже. Вполне себе вариант когда на месте a и b - вызовы функций символов на 20-30 кода, да или просто имена переменных символов 10-20.

Raider комментирует...

Тогда уж лучше
a ? !b : b
и то короче и нагляднее.

dimacpp комментирует...

Bitwise Exclusive OR Operator: ^

"The bitwise exclusive OR operator (^) compares each bit of its first operand to the corresponding bit of its second operand. If one bit is 0 and the other bit is 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0."

...

"The xor operator is the text equivalent of ^. "

MSDN

wave комментирует...

не совсем верно, извините.
у нее таблица истинности будет неправильная.
если
a = 8;
b = 4,
то
(a != b) будет равно 1,
а например (a ? !b : b) будет 0.

wave комментирует...

впрочем, если операнды - булевые переменные, то тогда конечно будет работать. но для булевых операндов будет работать и побитовый XOR.

GooRoo комментирует...

int xor(int a, int b) {
    return !a != !b;
}

Увидел здесь.

Данил комментирует...

Ну что же вы?
Напишите ассемблерную inline вставку )))

Данил комментирует...

Напишите ассемблерную вставку и всё, чтобы споров не было ;)