1. C 언어에서, 연산자 종류
ㅇ 산술 연산자 : ( + - * / % )
- + (덧셈), - (뺄셈), * (곱셈), / (나눗셈), % (나머지)
- 한편, 거듭제곱 연산자가 없어, 라이브러리 math.h의 pow()를 씀
ㅇ 부호 연산자 : ( + - )
- + (양수), - (음수)
ㅇ 대입 연산자 : ( = += -= *= /= %= )
- `=` : (오른쪽 표현식을 평가하고, 그 결과를 왼쪽에 대입)
* 복합 산술 연산자 (대입연산,산술연산을 함께 수행)
- `+=` : 例) a += b => a = a + b
- `-=` : 例) a -= b => a = a - b
- `*=` : 例) a *= b => a = a * b
- `/=` : 例) a /= b => a = a / b
- `%=` : 例) a %= b => a = a % b
ㅇ 증감 연산자 : ( ++ -- )
- 例) a++ (주변 연산을 진행한 후 1 증가), ++a (1 증가시킨 후 주변 연산을 진행)
ㅇ 비교 연산자 (6개) : ( == != <= < >= > )
- C 언어는, 논리값 상수(true,false)을 제공 안하므로, 0 (false),0 이외 숫자 (true)을 사용
- 例) printf("%d", 10 < 20) => 1 // (즉, true인 1을 출력 함)
ㅇ 논리 연산자 : ( || && ! )
- || (OR), && (AND), ! (NOT)
ㅇ 비트 연산자 : ( | & ~ ^ << >> )
- 비트 논리 연산자 : | (비트 OR), & (비트 AND), ~ (비트 반전 NOT), ^ (비트 XOR)
- 비트 이동 연산자 : << (왼쪽 시프트), >> (오른쪽 시프트)
ㅇ 포인터 연산자 : ( * & [] )
- &op : 변수 op가 위치한 메모리의 주소를 구함
- *op : 포인터 변수 op가 갖는 주소에 저장된 값을 구함
ㅇ 구조체 연산자 : ( . -> )
- 도트 연산자 (.) : 일반 구조체의 멤버 접근
- 화살표 연산자 (->): 구조체 포인터의 멤버 접근
ㅇ 삼항 연산자 : ( ? : )
- [조건식] ? [참일 경우 반환값] : [거짓일 경우 반환값]
ㅇ 기타 연산자
- 쉼표 연산자 : ,
- sizeof 연산자 : sizeof
- 캐스트 연산자 : (타입) 표현식
- 괄호 연산자 : ()
ㅇ C++ 연산자 : new delete :: .* ->*
2. 연산자 우선순위(precedence) 및 결합법칙
ㅇ 최우선 => [결합방향 : 좌에서 우로 →]
- (괄호 연산자) (식)
ㅇ 순위 1 => [결합방향 : 좌에서 우로 →]
- (후위 증감 단항 연산자) ++ -- , (함수 호출) (), (배열 인덱스) [] ,
(구조체 멤버) . , (구조체 포인터) -> , (복합 리터럴) (type){list}
ㅇ 순위 2 => [결합방향 : 우에서 좌로 ←]
- (전위 증감 단항 연산자) ++ -- , (부호) + - , (논리 연산자) ! ~ , (형변환) (type) ,
(간접 참조 연산자) * , (주소 추출 연산자) & , (크기 계산 연산자) sizeof
ㅇ 순위 3 => [결합방향 : 좌에서 우로 →]
- (산술 연산자) * / %
ㅇ 순위 4 => [결합방향 : 좌에서 우로 →]
- (산술 연산자) + -
ㅇ 순위 5 => [결합방향 : 좌에서 우로 →]
- (비트 연산자) << >>
ㅇ 순위 6 => [결합방향 : 좌에서 우로 →]
- (비교 연산자) < <= > >=
ㅇ 순위 7 => [결합방향 : 좌에서 우로 →]
- (비교 연산자) == !=
ㅇ 순위 8 => [결합방향 : 좌에서 우로 →]
- (비트 연산자 AND) &
ㅇ 순위 9 => [결합방향 : 좌에서 우로 →]
- (비트 연산자 XOR) ^
ㅇ 순위 10 => [결합방향 : 좌에서 우로 →]
- (비트 연산자 OR) |
ㅇ 순위 11 => [결합방향 : 좌에서 우로 →]
- (논리 연산자 AND) &&
ㅇ 순위 12 => [결합방향 : 좌에서 우로 →]
- (논리 연산자 OR) ||
ㅇ 순위 13 => [결합방향 : 우에서 좌로 ←]
- (삼항 연산자) ? :
ㅇ 순위 14 => [결합방향 : 우에서 좌로 ←]
- (대입 연산자) = , (산술 대입 연산자) += -+ *= /= %= ,
(복합 대입 연산자) <<= >>= &= ^= |=
ㅇ 순위 15 => [결합방향 : 좌에서 우로 →]
- (콤마 연산자) ,