[associativity] 연산자의 연관성은 무엇이며 왜 중요한가요?

연관성 (연속성)이란 무엇이며 왜 중요한가요?

업데이트 : 연산자 연관성



답변

연산자의 경우 연관성은 동일한 연산자가 행에 나타날 때 먼저 적용되는 연산자 발생을 의미합니다. 다음 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

올바른 연관성이라면 0으로 나누기 때문에 정의되지 않은 표현식으로 평가됩니다.

4 / 2 / 3    <=>    4 / (2 / 3)    <=> 4 / 0     = undefined


답변

세 가지 종류의 연관성이 있습니다.

수학의 연관성

프로그래밍 언어의 작업 순서

CPU 캐시의 연관성.

수학에서 연관 속성은 더하기 (+)와 같은 연산자의 속성입니다. 이 속성을 사용하면 명령문의 값을 변경하지 않고 괄호를 다시 정렬 할 수 있습니다.

(a + b) + c = a + (b + c)

프로그래밍 언어에서 연산자의 연관성 (또는 고 정성) 은 괄호 가 없을 때 동일한 우선 순위의 연산자를 그룹화하는 방법을 결정하는 속성입니다 . 즉, 각 연산자가 평가되는 순서입니다. 이것은 프로그래밍 언어마다 다를 수 있습니다.

CPU 캐시에서 연관성은 성능을 최적화하는 방법입니다.


답변

단순한!!

Left Associative means we evaluate our expression from left to right

Right Associative means we evaluate our expression from right to left

*, / 및 %의 우선 순위는 동일하지만 연관성에 따라 답변이 변경 될 수 있습니다.

예 : 우리는 다음과 같은 표현을 가지고 있습니다 : 4 * 8 / 2 % 5

Left associative:   (4 * 8) / 2 % 5 ==> (32 / 2) % 5 ==> 16 % 5 ==> 1

Right associative:  4 * 8 /(2 % 5) ==>  4 * ( 8 / 2) ==> 4 * 4 ==> 16


답변

“연산자 연관성”을 언급하는 경우-괄호가 없을 때 동일한 우선 순위의 연산자가 그룹화되는 방식을 언어가 결정하는 방식입니다.

예를 들어, C 기반 언어의 + 및-연산자는 동일한 우선 순위를 갖습니다. 둘 다 (괄호없이) 사용하는 식을 작성할 때 컴파일러는 평가할 순서를 결정해야합니다.

12-5 + 3을 쓰면 가능한 평가는 다음과 같습니다.

  1. (12-5) + 3 = 10
  2. 12-(5 + 3) = 4

표현식을 평가하는 순서에 따라 다른 결과를 얻을 수 있습니다. C 기반 언어에서 +와-는 연관성을 남겼습니다. 이는 위의 표현식이 첫 번째 경우로 평가된다는 것을 의미합니다.

모든 언어에는 우선 순위와 연관성 모두에 대해 강력하게 정의 된 규칙이 있습니다. 여기 에서 C # 규칙에 대해 자세히 알아볼 수 있습니다 . 연산자 연관성우선 순위 의 일반적인 개념은 wikipedia에서 잘 다룹니다.


답변

우선 순위가 동일한 연산자에 대한 평가 순서입니다. LEFT TO RIGHT 또는 RIGHT TO LEFT 순서가 중요합니다. 에 대한

3 - 2 - 1

LEFT에서 RIGHT이면

(3 - 2) - 1

0입니다. RIGHT에서 LEFT이면

3 - (2 - 1)

대부분의 언어에서 마이너스 연산자는 LEFT TO RIGHT 연관성이 있다고 말합니다.

2020 업데이트 :

3 - 2 - 1주장이 “물론 왼쪽에서 오른쪽으로한다”라면 상황은 사소한 것처럼 보일 수 있습니다. 그러나 Ruby 또는 NodeJS에서 수행되는 경우와 같은 다른 경우 :

$ irb
2.6.3 :001 > 2 ** 3 ** 2
 => 512

**연산자 “의 힘”이다. 연관성은 오른쪽에서 왼쪽입니다. 그리고 그건

 2 ** (3 ** 2)

이는 2 ** 9즉, 512대신

(2 ** 3) ** 2

이는 8 ** 2즉, 64.


답변

연산자 연관성을 의미한다고 가정합니다 …

연산자에 피연산자를 바인딩하는 순서입니다. 원래:

a-b + c

다음과 같이 평가 될 수 있습니다 (-및 +의 우선 순위가 같다고 가정).

((a-b) + c) 또는,
(a-(b + c))

연산자가 연관되어있는 경우 (왼쪽 피연산자에 즉시 바인딩) 첫 번째 연산자로 평가됩니다. 그들이 올바른 연관성이라면 두 번째로 평가됩니다.


답변

연산자 연관성을 의미하는 경우 :

식이 구문 분석되는 방식을 정의합니다. 표준을 제공하므로 모든 표현식이 동일한 방식으로 구문 분석됩니다.

부작용이있을 수있는 동일한 선례가있는 작업에 가장 중요합니다.