Какие будут измененные значения x, y & z, это программа на языке C? И, пожалуйста, Экзаплан почему?путаница в логическом операторе
main()
{
int x,y,z;
x=y=z=1;
z=++x||++y&&++z;
printf("x=%dy=%dz=%d",x,y,z);
}
Какие будут измененные значения x, y & z, это программа на языке C? И, пожалуйста, Экзаплан почему?путаница в логическом операторе
main()
{
int x,y,z;
x=y=z=1;
z=++x||++y&&++z;
printf("x=%dy=%dz=%d",x,y,z);
}
Только x
модифицируются и это значение становится 2
. Причиной этого является короткое раскручивание поведения логического оператора ||
.
Компилятор интерпретирует z=++x||++y&&++z;
, как
z = ++x || (++y&&++z);
из-за более высокого приоритета над &&
||
. С x
является 1
, то есть первое подвыражение ||
истинно, другие не будут проверены (и оценены).
Примечание: Вы можете получить предупреждение от некоторого компилятора
[Warning] operation on 'z' may be undefined [-Wsequence-point]
это из-за той причине, что вы не можете изменить переменную дважды между двумя точками последовательности. Но в приведенном выше коде z++
никогда не оцениваются, поэтому его поведение не определено.
Ну, 'z' будет присвоен результат' ++ x', поэтому значения будут 'x' == 2,' y' == 1 и 'z' == 2. –
@JohnBode ; Нет. Все выражение возвращает логическое значение '1' в' z'. – haccks
Duh. Я знал это. Служит мне для комментариев, прежде чем я полностью проснусь. –