Есть ли способ написать следующую инструкцию в одном условии?
a и b не равны пяти одновременно. (a может быть пять, а b может быть пять, но a b не может быть пять)
Как отметил Крис, то, что вы ищете, является логическим XOR, что эквивалентно логическому, а не равен !=
:
if ((x == 5) != (y == 5))
Я бы захотел написать его с помощью побитового XOR, хотя он был бы гораздо более читабельным и сразу узнаваемым как XOR:
if (x == 5 ^ y == 5)
Следует отметить, однако, что побитовые операторы не замыкаются. Это не имеет значения с XOR, так как оба операнда должны быть оценены в любом случае, но это может быть важно знать с другими операциями.
(Предупреждение о предупреждении: почти во всех ситуациях не используйте побитовые операторы в булевом контексте. Некоторые из операторов имеют немного другую семантику, и поскольку они не имеют короткого замыкания, могут быть некоторые довольно нечетные данные).
x != y
подразумевает x ^ y
. Хотя это не обобщает выражения для x и y. Как вы можете компактно выразить с помощью !=
Логика здесь? Я чувствую, что упускаю что-то очевидное сейчас :).
if(a!=b && (a==5 || b==5))
{
}
и спасибо @chris
a != b
намного более понятным, чем a+b != 10
. Плюс последний может переполниться.
if ((a == 5 && b != 5) || (a != 5 && b == 5))
{
//expr
}