개요
•
수학과 마찬가지로 프로그래밍 언어에서도 연산자를 처리할때 어느 것을 먼저 처리할지 정하기 위해서 연산자 우선순위가 존재합니다.
•
각 프로그래밍 언어마다 연산자의 종류와 우선순위는 약간씩 다릅니다.
•
대부분 C언어의 우선순위와 동일하며, 헷갈릴 만한 상황에는 괄호 () 를 통해서 다른사람이 보더라도 헷갈리지않게 코딩을 하는편이 좋다고 생각됩니다.
•
기본적인 우선순위는 알고있는편이 좋으며, 추가적으로 헷갈리는 상황이 벌어질때마다 레퍼런스나 신뢰할만한 자료를 찾아보아서 확인하는것이 좋습니다.
C언어 연산자 우선순위
1.
[], (), ., ->, ++, --
[] : 첨자 연산자 - 배열(포인터)에서 원소를 지정할 때 사용
() : 함수 호출 연산자 - C++에서는 함수 객체(function object)와 함께 사용도 가능하다. 그외에도 ()를 통해 기존 연산자 순위와 무관하게 우선순위를 가장 높게 처리할 수 있다.
. : 참조에 의한 선택
-> : 포인터에 의한 선택
++, -- (i++, i--) : 후위 증감 연산자
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
2.
sizeof, &, *, +, -, ~, !, ++, --
sizeof : 크기 연산자
& : 주소 연산자(단항 연산자) - 해당 변수의 주소값을 반환합니다.
* : 참조 연산자(단항 연산자) - 포인터의 이름이나 주소 앞에 사용하여, 포인터에 가리키는 주소에 저장된 값을 반환합니다.
+ : 양의 부호 (단항 연산자) - 덧셈 연산자와는 다릅니다(!).
- : 음의 부호 (단항 연산자) - 뺄셈 연산자와는 다릅니다(!).
~ : 비트 NOT 연산자 - 비트를 뒤집습니다. (비트 반전)
! : 논리 NOT 연산자 - 논리식의 결과가 참이면 0을, 거짓이면 1을 반환합니다.
++, -- (++i, --i) : 전위 증감 연산자
동일 연산자 순위에서는 오른쪽에서부터 왼쪽으로 처리합니다.
C
복사
3.
타입 캐스팅
(type) : 형 변환을 합니다.
ex)
int a = 10;
int b = 3;
float c;
c = a / b;
printf("%f, c); -> 3.000000 출력
c = (float)a / b;
printf("%f, c); -> 3.333333 출력
동일 연산자 순위에서는 오른쪽에서부터 왼쪽으로 처리합니다.
C
복사
4.
*, /, %
* : 곱셈 연산자
/ : 나눗셈 연산자
% : 나머지 연산자
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
5.
+, -
+ : 덧셈 연산자(이항 연산자) - 양의 부호 연산자와는 다릅니다(!).
- : 뺄셈 연산자(이항 연산자) - 음의 부호 연산자와는 다릅니다(!).
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
6.
<<, >>
<< : 왼쪽 시프트 연산자 - 정수 또는 열거형 형식 식의 비트를 왼쪽으로 이동합니다.
>> : 오른쪽 시프트 연산자 - 정수 또는 열거형 형식 식의 비트를 오른쪽으로 이동합니다.
부호 비트가 영향을 받도록 부호 있는 숫자를 왼쪽 시프트하면 결과가 정의되지 않았습니다.
오른쪽 시프트 연산에서 부호 있는 음수의 결과는 구현에 따라 다릅니다. Microsoft C++ 컴파일러는 부호 비트를 사용하여 비어 있는 비트 위치를 채우지만 다른 구현도 그렇게 한다는 보장은 없습니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
7.
<, >, <=, >=
관계연산자(relational operator) - 두 개의 값을 비교하는 논리식에 사용되는 연산자
a < b : a가 b보다 작다. 다음의 명제가 참이면 1, 거짓이라면 0
a > b : a가 b보다 크다. 다음의 명제가 참이면 1, 거짓이라면 0
a <= b : a가 b보다 작거나 같다. 다음의 명제가 참이면 1, 거짓이라면 0
a >= b : a가 b보다 크거나 같다. 다음의 명제가 참이면 1, 거짓이라면 0
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
8.
==, !=
동등연산자(equality operator)
a == b : a는 b와 같다. 다음의 명제가 참이면 1, 거짓이라면 0
a != b : a는 b와 같지않다. 다음의 명제가 참이면 1, 거짓이라면 0
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
9.
&
& : 비트 AND 연산자 - 각각의 대응되는 비트를 비교하면서 두개가 모두 1이면 1을 반환합니다. 그외에 경우에는 0을 반환합니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
10.
^
^ : 비트 XOR 연산자 - 각각의 대응되는 비트를 비교하면서 두개가 서로 다르다면 1을 반환합니다. 그외에 경우에는 0을 반환합니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
11.
|
| : 비트 OR 연산자 - 각각의 대응되는 비트 2개를 살펴보면서 1개라도 1이라면 1을 반환합니다. 그외에 경우에는 0을 반환합니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
12.
&&
&& : 논리 AND 연산자 - 논리식이 모두 참이라면 참(1)을 반환합니다. 거짓이라면 거짓(0)을 반환합니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
13.
||
|| : 논리 OR 연산자 - 논리식이 하나라도 참이라면 참(1)을 반환합니다. 거짓이라면 거짓(0)을 반환합니다. 검사하는 중간에 참이 발견되면, 이후 논리식은 실행하지 않습니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
14.
? :
? :
- 삼항 조건 연산자
조건식 ? 반환값1 : 반환값2
물음표(?) 앞의 조건식에 따라 결과값이 참(true)이면 반환값1을 반환하고, 결과값이 거짓(false)이면 반환값2를 반환합니다.
이때 반환값에는 값뿐만 아니라 수식, 함수 호출 등 여러 가지 형태의 명령문이 올 수 있습니다.
동일 연산자 순위에서는 오른쪽에서부터 왼쪽으로 처리합니다.
C
복사
15.
=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
대입 연산자 및 복합 대입 연산자(대입 연산자와 산술 연산자를 결합)
= : 왼쪽의 피연산자에 오른쪽의 피연산자를 대입합니다.
*= : 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
/= : 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
%= : 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입합니다.
+= : 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
-= : 왼쪽의 피연산자에 오른쪽의 피연산자를 뺀 후, 그 결과값을 왼쪽의 피연산자에 대입합니다.
<<= : 왼쪽의 피연산자의 비트를 오른쪽의 피연산자만큼 전부 왼쪽으로 이동시킨 후, 그 결과를 왼쪽의 피연산자에 대입합니다. (왼쪽 시프트 연산자 참조)
>>= : 왼쪽의 피연산자의 비트를 오른쪽의 피연산자만큼 전부 오른쪽으로 이동시킨 후, 그 결과를 왼쪽의 피연산자에 대입합니다. (오른쪽 시프트 연산자 참조)
&= : 왼쪽과 오른쪽 피연산자의 각각의 대응되는 비트를 비교하면서 두개가 모두 1이면 1을 대입합니다. 그외에 경우에는 0을 대입합니다. (비트 AND 연산자 참조)
^= : 왼쪽과 오른쪽 피연산자의 각각의 대응되는 비트를 비교하면서 두개가 서로 다르다면 1을 대입합니다. 그외에 경우에는 0을 대입합니다. (비트 XOR 연산자 참조)
|= : 왼쪽과 오른쪽 피연산자의 각각의 대응되는 비트 2개를 살펴보면서 1개라도 1이라면 1을 대입합니다. 그외에 경우에는 0을 대입합니다. (비트 OR 연산자 참조)
동일 연산자 순위에서는 오른쪽에서부터 왼쪽으로 처리합니다.
C
복사
16.
,
, : 쉼표 연산자 - 쉼표로 구분된 유형의 두 피연산자를 포함하며, 왼쪽에서 오른쪽으로의 흐름이 있습니다. 왼쪽 피연산자가 완전히 작동되어, 부수 효과를 생성할 수 있으며, 값 (있는 경우) 은 버려집니다. 그러면 오른쪽 피연산자가 작동됩니다. 쉼표 표현식의 결과 유형과 값은 일반적인 단항 변환 후에 오른쪽 피연산자의 결과입니다.
동일 연산자 순위에서는 왼쪽에서부터 오른쪽으로 처리합니다.
C
복사
JAVA 연산자 우선순위
Operators | Precedence |
postfix (후위표기법) | expr++ expr-- |
unary (단항 연산) | ++expr --expr +expr -expr ~ ! |
multiplicative | * / % |
additive | + - |
shift | << >> >>> |
relational (관계 연산자) | < > <= >= instanceof |
equality (동등연산자) | == != |
bitwise AND | & |
bitwise exclusive OR | ^ |
bitwise inclusive OR | | |
logical AND | && |
logical OR | || |
ternary (삼항 연산자) | ? : |
assignment (대입 연산자) | = += -= *= /= %= &= ^= |= <<= >>= >>>= |