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)в языках программирования ассоциативность (или фиксированность) оператора-это свойство, которое определяет, как операторы с одинаковым приоритетом группируются в отсутствие скобок; т. е. в каком порядке вычисляется каждый оператор. Это может отличаться между языками программирования.
в кэшах ЦП ассоциативность-это метод оптимизации производительности.
это порядок вычисления для операторов с одинаковым приоритетом. Порядок слева направо или справа налево имеет значение. Ибо
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# здесь. Этот общие понятия оператора ассоциативность и приоритет хорошо освещены в Википедии.
просто!! Левую Ассоциативность означает, что мы оцениваем наше выражение слева направо.
Правую Ассоциативность означает, что мы оцениваем наше выражение справа налево.
мы знаем *, / и % имеют одинаковый приоритет, но в соответствии с ассоциативностью ответ может измениться.
например: у меня есть exp: 4*8/2%5
левую ассоциативность: (4*8)/2%5 ==> (32/2)%5 ==>16%5 ==>1
правую ассоциативность: 4*8/(2%5) ==> 4*(8/0) ==>неопределенное поведение
Я надеюсь, что это поможет. . .
Я предполагаю, что вы имеете в виду ассоциативность оператора...
Это порядок привязки операндов к оператору. В основном:
a-b + c
может быть оценена как (если + и - имеют одинаковый приоритет):
((a - b) + c) или,
(a - (b + c))если операторы являются левыми ассоциативными (привязка сразу к левому операнду), он будет оцениваться как первый. Если они правильно ассоциативны, это будет оцениваться как второй.
Если вы имеете в виду ассоциативность оператора:
Он определяет способ анализа выражений. Он дает стандарт, поэтому каждое выражение анализируется одинаково.
Это в основном важно для операций, которые имеют тот же прецедент, когда могут быть побочные эффекты.
в большинстве предыдущих примеров использовались константы. Если аргументы являются вызовами функций, порядок, в котором выполняются вызовы, может быть определен правилами ассоциации, в зависимости от вашего компилятора. И если эти функции имеют побочные эффекты ..
мы все знаем, что приоритет важен, но так же важна и ассоциативность в интерпретации значения выражения. Для действительно простого вступления попробуйте власть операторов.
Comments