우선 순위 및 계산 순서

우선 순위와 결합성 C 연산자를 그룹화 하 고 식에서 피연산자의 평가 영향을 줍니다.연산자의 우선 순위가 다른 연산자를 더 높은 또는 낮은 우선 순위가 있는 경우만 의미가 있습니다.식은 사용 하 여 우선 순위가 높은 연산자가 먼저 계산 됩니다.우선 단어 "제본으로."도 설명 될 수 있습니다. 연산자는 우선 순위가 높은 바인딩이 밀접 하 게 된다고 합니다.

다음 표에서 우선 순위와 결합성 요약 (피연산자 계산 순서)의 C 연산자의 우선 순위가 가장 높은 것에서 낮은 화하여.여러 연산자를 함께 표시 하는 경우는 우선 순위가 같습니다과 연관성에 따라 평가 됩니다.연산자 테이블의 시작 부분에 설명 되어 후 위 연산자.이 섹션의 나머지 우선 순위와 결합성에 대 한 일반 정보를 제공합니다.

우선 순위 및 결합성을 C 연산자

Symbol1

작업의 종류

결합성

[ ] ( ) . -> 후 위 ++ 및 후 위 -

왼쪽에서 오른쪽

접두사 ++ 와 접두사 -sizeof & * + – ~! 

단항

오른쪽에서 왼쪽

typecasts

단항

오른쪽에서 왼쪽

* / %

승제

왼쪽에서 오른쪽

+ –

가감

왼쪽에서 오른쪽

<< >>

비트 시프트

왼쪽에서 오른쪽

< > <> = =

관계형

왼쪽에서 오른쪽

== !=

같음

왼쪽에서 오른쪽

&

비트-고

왼쪽에서 오른쪽

^

비트 배타적 논리합

왼쪽에서 오른쪽

|

-포괄-OR

왼쪽에서 오른쪽

&&

논리적으로 하 고

왼쪽에서 오른쪽

||

논리적 OR

왼쪽에서 오른쪽

?:

조건식

오른쪽에서 왼쪽

= *= /= %= 

+ =-= <> = = 및 =

^= |=

단순 및 복합 assignment2

오른쪽에서 왼쪽

,

순차 평가

왼쪽에서 오른쪽

1.연산자의 우선 순위가 내림차순으로 나열 됩니다.그룹에 여러 명의 연산자 같은 줄에 표시 하는 경우는 우선을 순위가 같습니다.

2.모든 단순 및 복합 할당 연산자 우선을 순위가 같습니다.

식에 우선 순위가 같은 여러 연산자를 포함할 수 있습니다.와 같은 여러 명의 연산자는 식에서 같은 수준에 표시 하는 경우 왼쪽에서 오른쪽으로 또는 오른쪽에서 왼쪽으로, 연산자의 연관성에 따라 평가 진행 합니다.평가의 방향을 곱하기 두 개 이상 포함 하는 식의 결과 영향을 미치는 (*), 더하기 (+), 또는 이진수 비트 (및 | ^) 같은 수준의 연산자입니다.작업의 순서는 언어에서 정의 되지 않았습니다.컴파일러는 일관 된 결과 보장할 수 있는 경우 컴파일러 임의의 순서로 이러한 식을 계산할 수 있습니다.

만 순차적으로 평가 (,), 논리-와 (& &), 논리적 OR (||), 조건식 (? :), 및 함수 호출 연산자 시퀀스 위치를 구성 하 고 따라서 특정 순서 대로 해당 피연산자에 대 한 평가 보장 합니다.함수 호출 연산자 함수 식별자 뒤 괄호 집합입니다.평가 순차 연산자 (,)는 피연산자가 왼쪽에서 오른쪽으로 평가 하도록 보장 됩니다.(쉼표 연산자 함수 호출에서 순차 평가 운영자 수 없습니다 하 고 그러한 보증을 제공 하지 않습니다 참고.) 자세한 내용은 시퀀스 위치.

논리 연산자는 또한 오른쪽으로 왼쪽에서 피연산자의 평가 보장합니다.가장 작은 숫자는 식의 결과 확인 하는 데 필요한 피연산자의 평가.이것을 "단락" 계산 이라고 합니다.따라서 일부 피연산자의 식 평가할 수 있습니다.예를 들어, 식에

x && y++

두 번째 피연산자 y++, 경우에 평가 됩니다 x 입니다 true (0이 아닌 값)입니다.따라서, y 경우는 증가 하지 않습니다 x false (0)입니다.

예제

다음은 컴파일러의 몇 가지 예제 식 자동으로 바인딩하는 방법을 보여 줍니다.

자동 바인딩

a & b || c

(a & b) || c

a = b || c

a = (b || c)

q && r || s--

(q && r) || s––

첫 번째 식에서 비트-및 연산자 (&) 논리적 OR 연산자 보다 우선 순위가 높습니다 (||)에 다음과 같은 a & b 논리 OR 연산의 첫 번째 피연산자를 형성 합니다.

두 번째 식에서는 논리 OR 연산자 (||) 단순 대입 연산자 보다 우선 순위가 높습니다 (=)에 다음과 같은 b || c 할당에 오른쪽 피연산자와 그룹화 됩니다.값을 할당 a 은 0 또는 1입니다.

세 번째 식 예기치 않은 결과가 발생할 수 있습니다 하는 올바른 형식의 식을 보여 줍니다.논리-및 연산자 (&&) 논리 OR 연산자 보다 우선 순위가 높습니다 (||)에 다음과 같은 q && r 는 피연산자를 그룹화 됩니다.논리 연산자는 피연산자의 평가 왼쪽에서 오른쪽으로 보장 되므로 q && r 하기 전에 평가 하는 s––.그러나 경우 q && r 0이 아닌 값으로 계산 되 s–– 계산 됩니다 및 s 이 줄어들지 않습니다.감소 시키는 않는 경우 s 프로그램에 문제가 발생할 s–– 식의 첫 번째 피연산자로 나타날 또는 s 별도 작업으로 감소 될 합니다.

다음 식을 법적 이며 컴파일 시 진단 메시지 생성:

식이 잘못 되었습니다.

기본 그룹

p == 0 ? p += 1: p += 2

( p == 0 ? p += 1 : p ) += 2

이 식에서 같음 연산자 (==) 우선 순위가 가장 높은, 따라서 p == 0 는 피연산자를 그룹화 합니다.조건식 연산자 (? :) 다음 가장 높은 우선 순위를 가집니다.첫 번째 피연산자는 p == 0, 및 두 번째 피연산자는 p += 1.그러나 마지막 피연산자는 조건식 연산자의 간주 됩니다 p 대신 p += 2,이 항목의 이후 p 복합 할당 연산자를 보다는 조건식 연산자 보다 세밀 하 게 바인딩합니다.구문 오류 때문에 발생 += 2 왼쪽 피연산자가 없습니다.이러한 종류의 오류를 방지 하 고 보다 읽기 쉬운 코드를 생성 하려면 괄호를 사용 해야 합니다.예를 들어, 괄호 안에 아래와 같이 수정 하 고 앞의 예제를 명확 하 게 사용 하면 수 있습니다.

( p == 0 ) ? ( p += 1 ) : ( p += 2 )

참고 항목

참조

C 연산자