Что такое ассоциативность операторов и почему она важна?

Что такое ассоциативность (для оператора) и почему это важно?

обновление: оператор ассоциативность

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 возможные оценок включить:

  1. (12 - 5) + 3 = 10
  2. 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))

если операторы остаются ассоциативными (немедленно привязываются к левому операнду), он будет оценен как первый. Если они являются правильными ассоциативными, они будут оцениваться как второй.


Если вы имеете в виду ассоциативность оператора:

Он определяет способ анализа выражений. Он дает стандарт, поэтому каждое выражение анализируется одинаково.

Это в основном важно для операций, которые имеют тот же прецедент, когда могут быть побочные эффекты.


в большинстве предыдущих примеров использовались константы. Если аргументы являются вызовами функций, порядок выполнения вызовов может определяться правилами ассоциации, в зависимости от вашего компилятора. И если эти функции имеют побочные эффекты ..


мы все знаем, что приоритет важен, но также важна ассоциативность в интерпретации значения выражения. Очень простое интро попробовать власть операторов.