<none>

From
Max Alekseyev (2:5015/60)
To
Andrey Tarasevich
Date
2002-09-30T13:06:54Z
Area
RU.ALGORITHMS
████ OS/2        Hi, Andrey !

Replying to a message of Andrey Tarasevich to Max Alekseyev:

 >> А что есть ассоциирование ("расставление скобок") как не определение
 >> порядка вычисления?

 AT> Ассоциирование есть определение, скажем так, "канонического" порядка
 AT> вычисления. Т.е. порядка, который однозначно определяет семантический
 AT> смысл выражения. Тем не менее в общем случае такой "канонический"
 AT> порядок вычисления не является единственным порядком вычисления.
 AT> Компилятор вправе выбрать абсюлютно любой порядок вычисления, главное
 AT> чтобы результат получился таким же, как и при "каноническом" порядке.
 AT> Т.е. ассоциативность говорит нам о том, каким будет результат
 AT> выражения. Но она ничего не говорит нам о том, каким образом это
 AT> выражение будет вычисляться.

 AT> Более того, компилятор может не только произвольно варьировать порядок
 AT> вычисления подвыражений, но и способ их вычисления. Если в некотором
 AT> выражении использованы операторы умножения и сложения, это совсем не
 AT> означает, что при вычислении этого выражения компилятор обязан
 AT> последовательно выполнять умножения и сложения. Если компилятор
 AT> сочтет нужным, он может вычислить это выражение при помощи делений и
 AT> сдвигов. Это его личное дело. Главное чтобы результат получился
 AT> правильным.

Хорошо, теперь вспомним начальное выражение a ^= b ^= a ^= b;
Ассоциирование дает нам "канонический" порядок вычисления: a ^= (b ^= (a ^= b));
Следуя этому порядку, значения a и b должны поменяться. Как это будет делать компилятор - неважно - хоть через xchg.
Но, как ты сам сказал, результат должен получиться правильным.

Regards,      °°
        Max    ~

--- FleetStreet 1.27.3.8
 * Origin:  (2:5015/60)