Условное утверждение (дано)

0

Есть ли способ написать следующую инструкцию в одном условии?

a и b не равны пяти одновременно. (a может быть пять, а b может быть пять, но a b не может быть пять)

  • 0
    ОН - совершенно неправильно. //провал
  • 0
    если (a! = 5 || b! = 5)
Показать ещё 1 комментарий
Теги:

3 ответа

3

Как отметил Крис, то, что вы ищете, является логическим XOR, что эквивалентно логическому, а не равен !=:

if ((x == 5) != (y == 5))

Я бы захотел написать его с помощью побитового XOR, хотя он был бы гораздо более читабельным и сразу узнаваемым как XOR:

if (x == 5 ^ y == 5)

Следует отметить, однако, что побитовые операторы не замыкаются. Это не имеет значения с XOR, так как оба операнда должны быть оценены в любом случае, но это может быть важно знать с другими операциями.

(Предупреждение о предупреждении: почти во всех ситуациях не используйте побитовые операторы в булевом контексте. Некоторые из операторов имеют немного другую семантику, и поскольку они не имеют короткого замыкания, могут быть некоторые довольно нечетные данные).

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

и спасибо @chris

  • 1
    Я нашел бы a != b намного более понятным, чем a+b != 10 . Плюс последний может переполниться.
  • 0
    Спасибо @ Крис, я принимаю твои
0
if ((a == 5 && b != 5) || (a != 5 && b == 5))
{
  //expr
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню