컴퓨터의 가장 중요한 능력은 계산능력이다. 계산을 위해 C++에서 사용되는 식과 연산자를 알아보겠다. 식은 간단하게 평소에 쓰는 수식을 생각하면 된다. 1+2을 예로 들면 연산자 +와 피연산자 1과 2가 있다. 여기서 1+2를 식(expression)이라고 부르고 이 식의 결과값을 평가(evaluation)라고 부른다. 식 1+2를 출력해보면 1+2가 그대로 출력되는 것이 아니라 1+2의 평가값인 3이 출력되는 것을 알 수 있다. 식은 출력될 때 평가를 거친 후에 출력되는 것이다.
#include <iostream> int main() { std::cout<<1+2<<std::endl; //식의 평가값인 3출력 return 0; }
C++에는 기본적인 사칙연산에 사용되는 +, -, *, / 말고도 다양한 연산자가 있다. 주로 사용하는 연산자를 표로 나타내보면 다음과 같다.
여기서 피연산자의 개수는 연산자가 사용된 식의 평가를 위해서 사용되는 피연산자의 개수이다. +(더하기)를 예로들면 1+2에서 1과 2 각각이 피연산자로 2개가 필요하다. 또한 같은 기호인데 피연산자의 개수에 따라 역할이 다르다는 것을 알 수 있다. 다시 +를 예로들면 피연산자가 하나일 때는 단항+, 두개일 때는 더하기임을 알 수 있다.
주로 사용되는(특히 for문과 같이 사용) ++와 --에 대해서 살펴볼만한 것이 있다. 바로 전위와 후위에 관한 내용이다. ++,-- 연산자는 다음과 같이 두 가지 형태로 쓸 수 있다.
++a //전위 증가 연산자 a++ //후위 증가 연산자 --b //전위 감소 연산자 b-- //후위 감소 연산자
전위와 후위 모두 값을 1 증가시키거나 1감소시키는 것은 같지만 이것을 변수에 대입할 때는 실행 결과가 달라질 수 있다. 전위 연산자는 대입하기 전에 값을 증가/감소 시키고 후위 연산자는 대입한 후에 값을 증가/감소 시킨다.
a=++b //b의 값을 1 증가시킨 후 a에 대입, 전위 a=--b //b의 값을 1 감소시킨 후 a에 대입, 전위 a=b++ //b의 값을 a에 대입한 후 b의 값을 1 증가, 후위 a=b-- //b의 값을 a에 대입한 후 b의 값을 1 감소, 후위
그 다음으로 살펴볼만한 것은 복합연산자이다. 복합연산자는 =(대입)연산자와 다른 연산자를 함께 사용한다. 다시 +를 예로 들면 =와 함께 사용해서 +=의 형태로 사용한다.
a+=b //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=a☆b의 형태로 나타낼 수 있고 의미또한 같다.
마지막으로 연산자 우선 순위를 알아보자. 일상생활에서 사용하는 사칙연산 또한 우선순위가 있듯이 C++에서 사용하는 연산자들도 우선순위가 있다. 연산자들의 우선순위를 표로 나타내면 다음과 같다.
출처: https://ko.cppreference.com/w/cpp/language/operator_precedence
우선순위가 낮은 연산자의 평가를 먼저 하고 싶다면 수식에서 사용하는 것과 마찬가지로 괄호로 묶어주면 된다. 같은 우선순위를 가지는 연산자를 동시에 사용하면 결합방향에 따라서 순서가 정해지게 된다. 우→좌일 경우 오른쪽부터 순서대로 평가되고 좌→우일 경우 왼쪽부터 순서대로 평가된다.
(a+b)*c //*보다 우선순위가 낮은 +를 괄호를 이용해 먼저 평가 a+b+c //a+b가 먼저 평가되고 (a+b)+c가 평가됨, 좌→우 a=b=c //b=c가 먼저 평가되고 a=(b=c)가 평가됨, 우→좌