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



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



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

736   9  

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

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

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

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

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

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

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

Comments

    Ничего не найдено.