연관성 (연속성)이란 무엇이며 왜 중요한가요?
업데이트 : 연산자 연관성
연관성 (연속성)이란 무엇이며 왜 중요한가요?
업데이트 : 연산자 연관성
답변:
연산자의 경우 연관성은 동일한 연산자가 행에 나타날 때 먼저 적용되는 연산자 발생을 의미합니다. 다음 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
expr -> expr + term;
왼쪽 연관이고 expr -> term + expr
오른쪽 연관입니다.
a * b / c
있는지 어떻게 평가 할까요? 그렇다면 모순이 있습니다. 따라서 여러 연산자를 다루려면 "같은 우선 순위와 연관성을 가진 연산자를 사용할 때"라고 말해야한다고 생각합니다. *
/
세 가지 종류의 연관성이 있습니다.
수학에서 연관 속성은 더하기 (+)와 같은 연산자의 속성입니다. 이 속성을 사용하면 명령문의 값을 변경하지 않고 괄호를 다시 정렬 할 수 있습니다.
(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
2 % 5
평가 2
하지 0
.
"연산자 연관성"을 언급하는 경우-괄호가 없을 때 동일한 우선 순위의 연산자가 그룹화되는 방식을 언어가 결정하는 방식입니다.
예를 들어, C 기반 언어의 + 및-연산자는 동일한 우선 순위를 갖습니다. 둘 다 (괄호없이) 사용하는 식을 작성할 때 컴파일러는 평가할 순서를 결정해야합니다.
12-5 + 3을 쓰면 가능한 평가는 다음과 같습니다.
표현식을 평가하는 순서에 따라 다른 결과를 얻을 수 있습니다. 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 연관성이 있다고 말합니다.
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))
연산자가 연관되어있는 경우 (왼쪽 피연산자에 즉시 바인딩) 첫 번째 연산자로 평가됩니다. 그들이 올바른 연관성이라면 두 번째로 평가됩니다.
우리 모두는 우선 순위가 중요하다는 것을 알고 있지만 표현의 의미를 해석 할 때 연관성도 중요합니다. 정말 간단한 소개를 위해 Power of Operators를 사용해보십시오 .
연관성은 프로그래밍 언어 개념에서 계산 순서를 따릅니다. 계산 순서는 표현식의 의미를 결정합니다. 두 가지 주요 규칙이 있습니다.
- 우선 순위 규칙
- 연관성 규칙
우선 순위 규칙은 서로 다른 유형의 "인접한"연산자가 평가되는 순서를 정의합니다. 모든 프로그래밍 언어에는 해당 연산자와 관련된 자체 연산자 우선 순위 테이블이 있습니다.
연관성으로 돌아가서
우선 순위가 동일한 인접 작업의 실행 순서를 정의합니다. 3 가지 맛이 있습니다.
왼쪽 연관성
오른쪽 연관성
비 연관성
연산자가 왼쪽 연관이면 왼쪽에서 오른쪽으로 평가되고 오른쪽 연관이면 오른쪽에서 왼쪽으로 평가됩니다.