Что такое ассоциативность операторов и почему она важна?
Что такое ассоциативность (для оператора) и почему это важно?
обновление: оператор ассоциативность
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))
если операторы остаются ассоциативными (немедленно привязываются к левому операнду), он будет оценен как первый. Если они являются правильными ассоциативными, они будут оцениваться как второй.
Если вы имеете в виду ассоциативность оператора:
Он определяет способ анализа выражений. Он дает стандарт, поэтому каждое выражение анализируется одинаково.
Это в основном важно для операций, которые имеют тот же прецедент, когда могут быть побочные эффекты.
в большинстве предыдущих примеров использовались константы. Если аргументы являются вызовами функций, порядок выполнения вызовов может определяться правилами ассоциации, в зависимости от вашего компилятора. И если эти функции имеют побочные эффекты ..
мы все знаем, что приоритет важен, но также важна ассоциативность в интерпретации значения выражения. Очень простое интро попробовать власть операторов.