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


88

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

업데이트 : 연산자 연관성


2
어떤 종류의 연관성? 연산자 연관성?
Ikke

26
@Neil Butterworth-합리적인 질문처럼 보이는 것에 대한 특히 가혹한 의견입니다. 사이트의 요점은 소개 텍스트에서 다루는 내용을 포함하여 모든 프로그래밍 지식을위한 중앙 저장소가되는 것입니다. @Jian Lin이 공식 FAQ의 첫 번째 질문에 설명 된대로 수용 가능한 자신의 의견에 대한 답변에 대해 언급합니다. 담당자 수준을 가진 사람이 더 잘 알고 있어야합니다. 그것에 동의하지 않는다면 적어도 그것에 대해 예의 바르게 행동하십시오.
Rob Allen

1
@Rob Allen 그의 다른 게시물을 참조하십시오. 또한 그가 자신의 게시물에 답하지 말아야한다고 말하지 않았고, 도움이되지 않았다고 말했습니다. 그리고 나는 당신에게 거래를 할 것입니다-당신이 내 문구를 어떻게 표현하는지 말하지 않으면 여기에서 당신의 게시물을 표현하는 방법을 말하지 않을 것입니다.

답변:


105

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

주어진 문법에 대해 왼쪽이든 오른쪽이든 연관성을 찾는 방법을 알고 있습니까?
user2510115

1
예를 들어 expr -> expr + term;왼쪽 연관이고 expr -> term + expr오른쪽 연관입니다.
Subin Sebastian

15
대답의 첫 번째 줄에서 "같은 연산자가 나타날 때"대신 "같은 우선 순위의 연산자가 나타날 때"라고 말하는 것이 더 적절합니다. 예 : a * b / c => 여기서 * 및 /의 우선 순위가 동일합니다.
1O1 2014 년

2
@ 1O1 감사합니다. 우선 순위가 동일한 연산자가 연관성이 다른 경우 어떻게됩니까? 왼쪽 연관성이 있지만 오른쪽 연관성이 a * b / c있는지 어떻게 평가 할까요? 그렇다면 모순이 있습니다. 따라서 여러 연산자를 다루려면 "같은 우선 순위와 연관성을 가진 연산자를 사용할 때"라고 말해야한다고 생각합니다. */
Johannes Schaub-litb

2
@Mark 모르겠지만 어떻게 작동해야하는지 생각할 수 없습니다. 아마도 추가
Johannes Schaub-litb

13

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

수학의 연관성

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

CPU 캐시의 연관성.

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

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

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

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


3
연산자의 연관성 (또는 고 정성)은 괄호가 없을 때 동일한 우선 순위의 연산자를 그룹화하는 방법을 결정하는 속성입니다. 이 구문은 제가 이해할 수 있도록 완벽했습니다
Rafael Eyng

7

단순한!!

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
: 대답에 오류가있는 것 같습니다 2 % 5평가 2하지 0.
6005

5

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

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

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

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

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

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


모두 동일한 피연산자를 사용하면 예제가 더 명확해질 것입니다.
Michael Carman

같은 우선 순위를 가진 두 연산자가 괄호없이 표현식에 나타 났지만 그중 하나는 연관성을 남겨두고 다른 연산자는 오른쪽을 가졌다면 어떻게 될까요? 가장 먼저 찾은 연산자의 연관성을 사용할까요?
Hector

동일한 선행이 동일한 연관성을 의미하므로 발생할 수 없습니다. 그렇지 않다면 현실의 존재 자체를 위협하는 모호성이 될 수 있습니다.
Ankur S

5

우선 순위가 동일한 연산자에 대한 평가 순서입니다. 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.


4
이미 답을 알고 있었다면 왜 질문 했습니까?
Robert Harvey

6
새로운 사람들을 돕는 것이 었습니다. 나는 오래 전에 C를 배웠던 것을 기억하고 나중에까지 연관성이 실제로 무엇인지 몰랐습니다.
비극성

3
나는 C를 배우는 대부분의 사람들이 당신의 "도움"없이도 할 수 있다고 생각합니다.

1
예를 들어 hm은 연관성이 동일한 연산자로 제한됩니까, 아니면 동일한 우선 순위 수준의 연산자에 대한 것입니까? 많은 사람들이 책이나 참고 문헌을 확인하지 않고 확실하게 대답 할 수 있습니까?
비극성

13
@Neil Butterworth, 왜 그렇게 적대적입니까? 귀하의 질문에 대한 답변을 게시하는 것이 허용됩니다. 이것은 FAQ에 있으며 팟 캐스트에서 여러 번 언급되었습니다.
Jay Conrod

3

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

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

a-b + c

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

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

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


1

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

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

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


0

이전 예의 대부분은 상수를 사용했습니다. 인수가 함수 호출 인 경우 호출 순서는 물론 컴파일러에 따라 연관 규칙에 의해 결정될 수 있습니다. 그리고 그 기능에 부작용이 있다면 ..


0

우리 모두는 우선 순위가 중요하다는 것을 알고 있지만 표현의 의미를 해석 할 때 연관성도 중요합니다. 정말 간단한 소개를 위해 Power of Operators를 사용해보십시오 .


0

연관성은 프로그래밍 언어 개념에서 계산 순서를 따릅니다. 계산 순서는 표현식의 의미를 결정합니다. 두 가지 주요 규칙이 있습니다.

  1. 우선 순위 규칙
  2. 연관성 규칙

우선 순위 규칙은 서로 다른 유형의 "인접한"연산자가 평가되는 순서를 정의합니다. 모든 프로그래밍 언어에는 해당 연산자와 관련된 자체 연산자 우선 순위 테이블이 있습니다.

연관성으로 돌아가서

우선 순위가 동일한 인접 작업의 실행 순서를 정의합니다. 3 가지 맛이 있습니다.

왼쪽 연관성
오른쪽 연관성
비 연관성

연산자가 왼쪽 연관이면 왼쪽에서 오른쪽으로 평가되고 오른쪽 연관이면 오른쪽에서 왼쪽으로 평가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.