2015-01-29 4 views
0

Я пытался программирования C и я написал небольшой код, но я не могу понять этопожалуйста, объясните выход этого

#include<stdio.h> 
int main() 
{ 

    int x,y,z,k; 
    x=y=z=k=1; 

    z=x++||y++&&k++; 
    printf("%d %d %d %d\n",x,y,z,k); 
} 

я ожидал выход как 2 1 1 2 , так как приоритет & & больше, чем || , но выход 2 1 1 1 поясните пожалуйста.

ответ

5

C использует short-circuit evaluation, поэтому, когда x++ оценивается как true, остальные выражения не оцениваются, и приращение не происходит.

+0

, но приоритет && больше, чем || так что оба (x ++ || y ++) и k ++ должны быть оценены, я согласен, что y ++ не будет выполняться, потому что x ++ - это правда, но k ++ должно быть сделано правильно? – maneesh

+0

Nope. Достаточно того, что 'x ++' оценивается как 'true'. Не нужно ничего делать с правой частью '||'. Этот ответ правильный. – Bathsheba

+0

@maneeshbhunwal; Прочтите это [ответ] (http://stackoverflow.com/a/17432858/2455888) – haccks

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