2015-03-18 2 views
-4
int x = 1,y = 1,z = 1; 

++x || ++y && ++z; 

printf("%d%d%d",x,y,z); 

дает значение 2,1,1. Но как эти унарные операторы и логические операторы работают, чтобы дать такой результат, я не могу понять. Работает ли только унарный оператор только для первого случая, а не для других. C также не имеет никакого логического типа данных. Пожалуйста, помогите мне с моей проблемой., пожалуйста, помогите мне с работой программы c.

+1

В 'C', если у вас есть' exp1 || exp2' и 'exp1' является« правдивым »(что« 2' является правдивым), тогда он не будет беспокоить выполнение 'exp2', поскольку' || 'означает OR. Приоритет оператора указывает, что '++ x || ++ y && ++ z' будет вести себя как' ++ x || (++ y && ++ z) '. Таким образом, только «x» будет увеличиваться. Выражение '++ y && ++ z' пропускается. – lurker

ответ

1

lurker Ответ сверху правильный.

|| и && являются short circuit operators.

Эквивалент код:

if(! ++x) { 
    if(++y) { 
     ++z; 
    } 
} 
+0

большое спасибо за устранение сомнений –

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