<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)