● 단항 연산자
▶ + / - : 부호 변경
◎ +a : a와 같음
◎ -a : a의 부호 변경
▶ ++, -- : 증감 연산자
◎ ++a : 전위 증감, 변수 a의 값을 1 더한 값을 반환 (변수처럼 값 대입 가능)
◎ a++ : 후위 증감, 변수 a의 값을 반환하고, 1을 더함 (변수처럼 값 대입 불가능)
▷ --는 값에서 1을 뺀다.
▶ & : 주소 연산자
◎ &a : 변수 a의 주소를 가져옴. (주소는 차지하는 연속된 메모리에서 첫번째 메모리의 주소)
▶ * : 역참조 연산자
◎ *pa : 주소 pa에 있는 값을 가져옴. (메모리 크기는 pa의 포인터 자료형에 따른다.)
▶ ! : 부정 (논리 연산자)
◎ !a : a가 true라면 false를, false라면 true를 반환
▶ ! : 반전 (NOT) (비트 연산자)
◎ ~a : a의 비트를 반전. (1->0, 0->1)
▶ (type) : 타입 캐스팅, 명시적 형변환
◎ (int) a : a의 자료형을 int로 바꿈 (float/double의 실수형이었다면 내림 처리)
▶ sizeof() : 변수 메모리 크기 확인
◎ sizeof(a) : 변수 a가 차지하는 메모리 크기를 확인 (배열이라면 배열이 차지하는 메모리까지도)
● 이항 연산자
▶+, -, *, /, % : 산술 연산자
◎ a%b : a에서 b를 나눈 나머지.
▶ &&, ||, : 논리 연산자
◎ a&&b : a and b, a와 b가 모두 true 이면 true, 나머지는 false.
◎ a| |b : a or b, a와 b가 모두 flase 이면 false, 나머지는 true.
▶ ==, !=, >, <, >=, <= : 관계 연산자
◎ a==b : a와 b가 같으면 true, 아니면 false.
◎ a!=b : a와 b가 다르면 true, 아니면 false.
◎ a>b : a가 b보다 크면 true, 아니면 false.
◎ a<b : a가 b보다 작으면 true, 아니면 false.
◎ a>=b : a가 b보다 크거나 같으면 true, 아니면 false.
◎ a<=b : a가 b보다 작거나 같으면 true, 아니면 false.
▶ = : 대입 연산자
◎ a=b : 변수 a에 b의 값을 대입. 대입한 값을 반환.
▶ +=, -=, /=, *=, %= : 복합 대입 연산자
▷ a□=b : a=a□b. (□는 +,-,/,*,% 중 하나)
▶ &, ^, |, >>, << : 비트 연산자
▷ 비트 연산 : 두 수의 2진수값을 기준으로, 같은 자리수끼리 연산을 하여 이를 자리수 끝까지 반복함.
◎ a&b : 비트 AND 연산, 둘 모두 1이면 1, 나머지 0.
◎ a^b : 비트 XOR 연산, 둘의 값이 같으면 1, 나머지 0.
◎ a|b : 비트 OR 연산, 둘 모두 0이면 0, 나머지 1.
▷ 시프트 연산 : 자리수를 움직임.
◎ a>>b : 오른쪽 시프트 연산, a의 비트를 b만큼 오른쪽으로 이동. 새로운 비트는 부호 비트와 같음.
◎ a<<b : 왼쪽 시프트 연산, a의 비트를 b만큼 왼으로 이동. 새로운 비트는 0.
▶ &=, ^=, |=, >>=, <<= : 비트 복합 대입 연산자
▷ a□=b : a=a□b. (□는 &,^,|,>>,<< 중 하나)
● 삼항 연산자
▶ (? : ) : 조건 연산자
◎ (a ? b : c) : 조건 a의 결과가 true이면 b를, false이면 c를 반환.
※ , : 쉼표 연산자
◎ a, b : 두 식 모두 수행, 뒤의 식의 결과를 반환.
● 연산자 우선순위
▶ 동일 연산자끼리
▷ 우우선 : 오른쪽부터 왼쪽으로 연산한다.
단항연산자 (후위 증감 제외), 대입 연산자, 조건 연산자
▷ 좌우선 : 왼쪽부터 오른쪽으로 연산한다.
우우선을 제외한 모든 연산자
▶ 다른 연산자끼리
우선순위 | 연산자 | 설명 | 결합법칙 (방향) |
1 | () | 괄호, 함수 호출 | 좌우선 (->) |
1 | a++, a-- | 후위 증감 연산자 | 좌우선 |
1 | [] | 배열 첨자 | 좌우선 |
1 | ., -> | 구조체 멤버 접근 연산자 | 좌우선 |
1 | (자료형) {값} | 복합 리터럴 | 좌우선 |
2 | ++a, --a | 전위 증감 연산자 | 우우선 (<-) |
2 | +a, -a | 부호 변경 | 우우선 |
2 | !, ~ | 논리 / 비트 NOT | 우우선 |
2 | (자료형) | 자료형 변환 | 우우선 |
2 | &, * | 주소 / 역참조 연산자 | 우우선 |
2 | sizeof() | 자료형의 크기 | 우우선 |
3 | *, /, % | 산술 연산자 (곱,분,나머지) | 좌우선 (->) |
4 | +, - | 산술 연산자 (합,차) | 좌우선 |
5 | >>, << | 시프트 연산자 | 좌우선 |
6 | <, <=, >, >= | 관계 연산자 (크기 비교) | 좌우선 |
7 | ==, != | 관계 연산자 (같음 비교) | 좌우선 |
8 | & | 비트 AND 연산자 | 좌우선 |
9 | ^ | 비트 XOR 연산자 | 좌우선 |
10 | | | 비트 OR 연산자 | 좌우선 |
11 | && | 논리 AND 연산자 | 좌우선 |
12 | | | | 논리 OR 연산자 | 좌우선 |
13 | ? : | 조건 연산자 | 우우선 (<-) |
14 | □= | 복합 대입 연산자 (비트포함) | 우우선 |
15 | , | 쉼표 (콤마) 연산자 | 좌우선 (->) |