2016-09-28 2 views
0
int j=4; 
(!j!=1)?printf("Welcome"):printf("Bye"); 

В приведенном выше сегменте кода, по мне, первый приведет к истинным и !true является ложным, которое должно привести к печати Bye, но я получаю Welcome как выход.выполнение условных операторов

Может ли кто-нибудь объяснить это?

+0

Посмотрите на [таблицу приоритетов операторов] (http://en.cppreference.com/w/c/language/operator_precedence) и ответьте сами. –

+1

Очевидно, это должно было быть написано как «j ?? !! j! = 1? printf («Добро пожаловать»): printf («Bye»); вместо этого для ясности. – Lundin

+0

Было бы хорошо, если бы вы отметили один из ответов как ответ ... – Charles

ответ

2

! выполнено первым, поскольку унарный оператор ! имеет более высокий приоритет, чем !=.

!4 становится 0 затем 0 != 1 становится true.

Итак, выход Welcome.

2

Это происходит потому, что ! (NOT) имеет более высокую, чем operator precedence!= так ...

j = 4; // 4 
!j // 0 

В вашем состоянии, 0 != 1 будет верно так: «Добро пожаловать» печатается.

Для вашего желаемого результата ваше состояние должно быть !(j!=1).

Смежные вопросы