y += (x-- ? z++ : --z); так это ваш вопрос и ответ прост............
Поскольку мы знаем, что что-то вроде X-- или x++ называется пост-инкрементом или декрементом. Таким образом, в соответствии с правилами постинкремента или декремента сначала будет оцениваться выражение, а затем в действие вступит только инкремент или декремент. сначала оцените, а затем увеличьте или уменьшите.....
СЕЙЧАС давайте решим ваш вопрос:
Y+=X--?Z++:--Z....теперь он содержит три части, т.е. левую, среднюю и правую...теперь точка рассмотрения такова: "если левая часть верна, то она вернет среднюю часть, в противном случае правая часть... и выполнение всегда начинается с левой части, так как это часть условия"
Теперь упростите оператор следующим образом: Y+=X?Z:Z;....Теперь посмотрите, имеет ли левая часть пред- или постинкремент или декремент.....если пост ++/-- der den сначала оцените упрощенный утверждение...... ден перейти на ++/--.....
Теперь левая часть имеет пост-декремент... поэтому давайте сначала оценим выражение... т.е.
y+=1:3:3 //любое ненулевое значение в части условия является истинным условием (т.е. 1)
так что теперь наше условие истинно, и оно вернет среднюю часть, и когда элемент управления перейдет к средней части, в это время будет уменьшено только значение x, то есть оно станет 0....
Теперь 2-й упрощенный оператор Y+=Z. (\\ поскольку условие истинно и мы получили среднюю часть, компилятор пропустит остальную часть, т.е. правую часть.)
Теперь понаблюдайте, является ли Z пост-++/-- (или) пред-++/--) ... ха-ха... его пост-инкремент... так что просто сначала оцените упрощенный оператор2, а затем увеличьте значение Z.... то есть
Y+=Z =>Y=Y+Z
=>Y=2+3 =>y=5
Теперь выражение оценивается, т.е. Y=5, поэтому теперь увеличивайте значение Z, т.е. оно становится 4
person
K V Ajay Kumar
schedule
20.07.2013