Search
Duplicate
🦑

매번 헷갈리는 연산자 정리와 우선순위

간단소개
연산자를 알아봅시다!
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
C++
Java
태그
기초
Scrap
9 more properties

개요

수학과 마찬가지로 프로그래밍 언어에서도 연산자를 처리할때 어느 것을 먼저 처리할지 정하기 위해서 연산자 우선순위가 존재합니다.
각 프로그래밍 언어마다 연산자의 종류와 우선순위는 약간씩 다릅니다.
대부분 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 (대입 연산자)
= += -= *= /= %= &= ^= |= <<= >>= >>>=

참고 자료