Задачи по языку С

       

Поскольку левый операнд операции имеет


вначале x=1, y=1, z=1 ++x ++y && ++z
((++x)(++y)&&(++z)) Сопоставляем операнды с операциями.
(2(++y)&&(++z)) и x=2 Вычисляем выражение слева направо
(TRUEчто-то еще) Поскольку левый операнд операции имеет значение ИСТИНА, нет смысла проводить вычисления дальше. Фактически в языке С гарантируется, что в подобных случаях вычисления прекращаются. Иными словами, логическое выражение вычисляется слева направо до тех пор, пока не станет известно его значение, т.е. для данной задачи x и y останутся равными 1.




вначале x=1, y=1, z=1 ++ x && ++ y ++ z (((++x)&&(++y))(++z)) ((TRUE&&(++y))(++z)) и x=2
((2&&2)(++z)) и y=2 Вычисляем выражение слева направо
(TRUE(++z))
TRUE или 1 Значение z не меняется


вначале x=1, y=1, z=1 ++ x && ++ y && ++ z (((++x)&&(++y))&&(++z)) ((2&&2)&&(++z)) и x=2, y=2 (TRUE&&(++z)) (TRUE&&TRUE) и z= 2 TRUE или 1



вначале x=-1, y=-1, z=-1 ++ x && ++ y ++ z (((++x)&&(++y))(++z)) ((0&&(++y))(++z)) и x=0 ((FALSE&&(++y))(++z))
(FALSE(++z)) Здесь нет необходимости вычислять ++y, так как левый операнд логической операции && есть ЛОЖЬ. Но результат логической операции пока еще неизвестен.
(FALSE(0)) и z=0 (FALSEFALSE) FALSE или 0


вначале x=-1, y=-1, z=11 ++ x ++ y && ++ z ((++x)((++y)&&(++z))) (FALSE((++y)&&(++z))) и x=0 (FALSE(FALSE&&(++z))) и y=0 (FALSEFALSE) FALSE или 0



вначале x=-1, y=-1, z=11 ++ x && ++ y && ++ z (((++x)&&(++y))&&(++z) ((FALSE&&(++y))&&(++z) и x=0 (FALSE&&(++z)) FALSE или 0

Относительно побочных эффектов при вычислении логического выражения. К этому моменту вы уже без сомнения могли заметить, что вычисление логических выражений в С может быть коварным, поскольку вычисление правой части выражения может проводиться в зависимости от значения левой его части. На самом деле такое условное вычисление является полезным свойством логических операций. Проблемы возникают только, когда правая часть логического выражения содержит побочный эффект; иногда побочный эффект будет иметь место, а иногда и нет. Так что если вообще побочными эффектами нужно пользоваться с осторожностью, то в логических выражениях это следует делать сверхосторожно.


Содержание раздела