개요
연산자는 수학 계산 기호를 의미합니다. 흔히 아는 덧셈, 뺄셈 등 입니다. 본 챕터에서는 PAWN 언어가 어떤 연산자를 지원하는지, 그리고 그들의 우선 순위가 어떻게 되는지를 설명합니다. 연산자는 예제를 따로 마련하지 않았습니다. 실전 경험을 통해 익히시는 것을 추천드립니다.
비트 연산처럼 이해가 복잡한 연산자도 있으나, 어차피 잘 사용하지 않으므로 이해가 되지 않는다면 넘기셔도 됩니다. 본 챕터는 '일단은' 모든 연산자에 대해 서술합니다.
Arithmetic(산술)
산술 연산자는 흔히 아는 수학적 기호들을 얘기합니다.
- + (덧셈)
- a + b
- - (뺄셈)
- a - b
- -a (a의 부호를 반대로 합니다)
- * (곱셈)
- a * b
- / (나눗셈 또는 몫)
- a / b
- a와 b가 정수(int)일 경우, 몫이 반환됩니다. (예: 7 / 3 = 2)
- a와 b 둘 중 하나라도 실수(float)일 경우, 나누기가 됩니다. (예: 3.14 / 2 = 1.57)
- % (나머지)
- a % b
- a를 b로 나눈 나머지가 반환됩니다. (예: 8 % 3 = 2)
- ++ (증가)
- a++
- a 값이 1 증가합니다.
- -- (감소)
- a--
- a 값이 1 감소합니다.
Bit manipulation(비트 조작)
비트를 조작하는 연산자입니다. 일반적인 상황에서는 자주 쓰이지 않습니다.
- ~
- ~a
- a의 모든 비트를 반전 시킵니다. (1의 보수)
- >>
- a >> b
- a를 b비트 만큼 오른쪽으로 Arithmetic Shift 합니다.
- Arithmetic Shift는 부호 비트(맨 왼쪽)가 유지됩니다.
- >>>
- a >>> b
- a를 b비트 만큼 오른쪽으로 Logical Shift 합니다.
- Logical Shift는 부호 비트도 Shift 되며, 맨 왼쪽 비트가 0으로 채워집니다.
- <<
- a << b
- a를 b비트 만큼 왼쪽으로 Shift 합니다.
- 맨 오른쪽 비트는 0으로 채워집니다.
- &
- a & b
- a와 b를 비트 단위로 AND 연산 합니다.
- |
- a | b
- a와 b를 비트 단위로 OR 연산 합니다.
- ^
- a ^ b
- a와 b를 비트 단위로 XOR 연산 합니다.
- (a의 b승이 아닙니다!)
Assignment(할당)
지금까지 new a = 100; 과 같은 코드를 아무렇지 않게 사용하였으나, 여기서 = 또한 연산자입니다. 이제 자세하게 배워보도록 하겠습니다.
- =
- a = b
- a에 b를 할당(저장)합니다. (예: a = 50)
- +=
- a += b
- a를 b만큼 증가시키고 a에 저장합니다. (예: a += 100)
- a = a + b 와 같은 표현입니다.
- -=
- a -= b
- a를 b만큼 감소시키고 a에 저장합니다.
- a = a - b 와 같은 표현입니다.
- /=
- a /= b
- a를 b로 나눈 몫(또는 나눗셈)을 a에 저장합니다.
- a = a / b 와 같은 표현입니다.
- %=
- a %= b
- a를 b로 나눈 나머지를 a에 저장합니다.
- >>=
- a >>= b
- a를 b비트 만큼 Arithmetic Right Shift 하여 a에 저장합니다.
- >>>=
- a >>>= b
- a를 b비트 만큼 Logical Right Shift 하여 a에 저장합니다.
- <<=
- a <<= b
- a를 b비트 만큼 Left Shift 하여 a에 저장합니다.
- &=
- a &= b
- a와 b를 비트 단위로 AND 연산하여 a에 저장합니다.
- |=
- a |= b
- a와 b를 비트 단위로 OR 연산하여 a에 저장합니다.
- ^=
- a ^= b
- a와 b를 비트 단위로 XOR 연산하여 a에 저장합니다.
Relational(관계)
지금까지 연산자는 오른쪽의 값을 이용하여 왼쪽에 저장하는 방식이었습니다. 예를 들어 a += 100 과 같습니다.
관계 연산자는 오른쪽과 왼쪽을 비교하여, 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
Boolean(논리)
논리 연산자는 값을 비교하여 true와 false 값을 뱉는 연산자입니다.
- !
- !a
- a와 반전된 값을 출력합니다.
- a가 true 라면 반환값은 false 입니다. 그 반대도 마찬가지입니다.
- ||
- a || b
- OR 연산자로서, a와 b 둘 중 한개라도 true일 경우 true가 됩니다.
- a가 true라면 b는 아예 참고하지 않습니다. (어차피 OR 결과가 true 이므로)
- &&
- a && b
- AND 연산자로서, a와 b 둘 다 true일 때 결과가 true가 됩니다.
- a가 false라면 b는 아예 참고하지 않습니다. (어차피 AND 결과가 false 이므로)
Miscellaneous(기타 연산자들)
- ? :
- a ? b : c
- 삼항 연산자 입니다. a 조건이 true일 경우 b가 실행되고, false라면 c가 실행됩니다.
- sizeof
- sizeof a
- a 변수의 크기를 반환합니다. 여기서 크기는 cell 단위입니다.
- new a; 의 경우 크기는 1 입니다.
- new b[100]; 의 경우 크기는 100 입니다. (배열 챕터에서 배웁니다.)
연산자의 우선 순위
연산자의 우선 순위는 아래 표와 같습니다. (출처: Pawn Language Guide.pdf)