Что такое ассоциативность операторов и почему это важно?
Что такое ассоциативность (для оператора) и почему это важно?
Обновлено: оператор ассоциативности
9 ответов
Для операторов ассоциативность означает, что когда один и тот же оператор появляется в строке, то к какому оператору мы обращаемся в первую очередь. В следующем, пусть Q
быть оператором
a Q b Q c
Если Q
остается ассоциативным, то оценивается как
(a Q b) Q c
И если это правильно ассоциативно, то оно оценивается как
a Q (b Q c)
Это важно, так как это меняет значение выражения. Рассмотрим оператор деления с целочисленной арифметикой, который остается ассоциативным
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
Если бы это было правильно, ассоциативно, это привело бы к неопределенному выражению, так как вы бы делили на ноль
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
Существует три вида ассоциативности:
Ассоциативное свойство в математике
Порядок операций на языках программирования
Ассоциативность в процессорных кэшах.
Ассоциативное свойство в математике - это свойство операторов, таких как сложение (+). Это свойство позволяет вам переставлять круглые скобки без изменения значения оператора, то есть:
(a + b) + c = a + (b + c)
В языках программирования ассоциативность (или фиксированность) оператора - это свойство, которое определяет, как операторы с одинаковым приоритетом группируются при отсутствии скобок; т.е. в каком порядке оценивается каждый оператор. Это может отличаться между языками программирования.
В кешах ЦП ассоциативность - это метод оптимизации производительности.
Просто!!Левый Ассоциативный означает, что мы оцениваем наше выражение слева направо.
Правая ассоциация означает, что мы оцениваем наше выражение справа налево.
Мы знаем *, / и% имеют одинаковый приоритет, но в соответствии с ассоциативностью ответ может измениться.
Например: у меня есть опыт: 4*8/2%5
Левая ассоциация: (4 * 8) / 2% 5 ==> (32/2)% 5 ==> 16% 5 ==> 1
Право ассоциативно: 4 * 8 / (2% 5) ==> 4 * (8/0) ==> Неопределенное поведение
Я надеюсь, что это поможет.,,
Это порядок вычисления для операторов с одинаковым приоритетом. Порядок влево или вправо или влево имеет значение. За
3 - 2 - 1
если он направо, то это
(3 - 2) - 1
и равен 0. Если это право, чтобы уйти, то это
3 - (2 - 1)
и это 2. В большинстве языков мы говорим, что оператор минус имеет левостороннюю ассоциативность.
Если вы имеете в виду "ассоциативность операторов" - это то, как язык определяет, как операторы с одинаковым приоритетом группируются при отсутствии скобок.
Например, операторы + и - в языках на основе C имеют одинаковый приоритет. Когда вы пишете выражение, которое использует оба из них (без скобок), компилятор должен определить, в каком порядке их оценивать.
Если вы напишите 12 - 5 + 3, возможные оценки включают в себя:
- (12 - 5) + 3 = 10
- 12 - (5 + 3) = 4
В зависимости от порядка, в котором вы оцениваете выражение, вы можете получить разные результаты. В языках на основе C + и - оставили ассоциативность, что означает, что приведенное выше выражение будет оцениваться как первый случай.
Все языки имеют строго определенные правила как для приоритета, так и для ассоциативности. Вы можете узнать больше о правилах для C# здесь. Общие понятия операторской ассоциативности и приоритета хорошо освещены в Википедии.
Я предполагаю, что вы имеете в виду ассоциативность операторов...
Это порядок привязки операндов к оператору. В принципе:
а - б + с
может оцениваться как (при условии - и + имеют одинаковый приоритет):
((a - b) + c) или,
(а - (б + в))
Если операторы остаются ассоциативными (немедленно связываются с левым операндом), он будет оцениваться как первый. Если они правы, это будет оцениваться как второе.
Если вы имеете в виду ассоциативность операторов:
Он определяет способ анализа выражений. Это дает стандарт, поэтому каждое выражение анализируется одинаково.
Это главным образом важно для операций, которые имеют такой же приоритет, когда могут быть побочные эффекты.
Все мы знаем, что приоритет важен, но так же ассоциативность в интерпретации значения выражения. Для действительно простого вступления попробуйте Power of Operators.
В большинстве предыдущих примеров использовались константы. Если аргументы оказываются вызовами функций, порядок выполнения вызовов может определяться правилами ассоциации, в зависимости, конечно, от вашего компилятора. И если эти функции имеют побочные эффекты..
В концепциях языка программирования ассоциативность определяется порядком вычислений. Порядок вычисления определяет смысл выражения. В нем есть два основных правила:
- Правила приоритета
- Правила ассоциативности
Правила приоритета определяют порядок, в котором оцениваются "смежные" операторы разных типов. Каждый язык программирования имеет свою собственную таблицу приоритета операторов в отношении своих операторов.
Возвращаясь к ассоциативности,
Он определяет порядок выполнения смежных операций с одинаковым приоритетом. Имеет 3 вкуса,
левоассоциативность
правоассоциативность
неассоциативность
Если оператор левоассоциативен, он оценивается слева направо, а если он ассоциативен справа, он оценивается справа налево.