вначале x=3, y=2, z=1 x < y ? y : x | |
(x<y)?(y):(x) | Операция условия, если не считать, что она использует три операнда, разбирается подобно любой другой операции. |
((x<y)?(y):(x)) | |
(FALSE?(y):(x)) | Вначале вычисляется условие. Затем выполняется или часть операции, соответствующая истинному значению условия, или часть, соответствующая ложному значению условия, но не обе вместе. |
(x) | В этой задаче значение условия - ЛОЖЬ, поэтому значением всего выражения будет значение выражения, соответствующего ложному значению условия. |
(3) 3 |
вначале x=3, y=2, z=1 x < y ? x++:y++ ((x<y)?(x++):(y++)) | |
(FALSE?(x++):(y++)) | Вначале вычисляем условие. |
((y++)) | Значение условия - ЛОЖЬ, поэтому должна вычисляться часть, соответствующая ложному значению условия. |
(2), и x=3 | |
2 | (Так как операция x++ не выполнялась, то значение x остается равным 3.) |
вначале x=3, y=3, z=1 z += x < y ? x++ : y++ (z+=((x<y)?(x++):(y++))) (z+=(FALSE?(x++):(y++))) | |
(z+=(y++)) | Результат условного выражения - это результат присваивания. |
(z+=(3)), и y=4 (z=z+3) (z=4) 4 |
вначале x=3, y=4, z=4 ( z >= y >= x ) ? 1 : 0 (((z>=y)>=x)?(1):(0)) | |
((TRUE>=x)?(1):(0)) | Условие начинает вычисляться изнутри. |
((1>=x)?(1):(0)) | Значение самого внутреннего условия - ИСТИНА. Оно сравнивается со значением целого x. Хотя это и законно в языке С, и со значением ИСТИНА обходятся вольно, считая его целым числом, в данном случае это 1. Однако часто, как и в этой задаче, это не приносит желаемых результатов. (Следующая задача показывает правильный способ для сравнения трех величин.) |
(FALSE?(1):(0)) ((0)) 0 |
вначале x=3, y=4, z=4 z >= y && y >=x ((z>=y)&&(y>=x)) | |
(TRUE&&(y>=x)) | Вычисляем выражение слева направо. |
(TRUE&&TRUE) (TRUE) 1 |