학습 목표
1. 프로그램이 연산을 진행하는 과정을 이해합니다.
2. 연산의 우선순위에 대해 이해합니다.
ㆍ연산 시스템
컴퓨터가 덧셈, 뺄셈과 같은 연산을 진행하기 위해서는 1. 연산되어질 피연산자가 메모리에 존재하여야 하고 2. 피연산자들은 자료형이 같아야 하며 3. CPU에 연산될 피연산자들이 전달되어야 합니다. 다음 그림은 x = y + 5 가 실제로 진행되는 과정을 나타낸 그림입니다.
x = y + 5 라는 식은 크게 덧셈연산과 대입연산으로 나누어 생각할 수 있습니다. 첫번째로 메모리에 존재하는 y와 5의 값을 CPU로 이동시켜서 덧셈을 진행하게 되고 두번째로 그 결괏값이 x의 메모리공간에 대입됩니다. CPU가 어떤 방식으로 작동되고 어떻게 연산이 되어지는 지는 프로그래머 입장에서는 몰라도 무방하지만, 우리가 작성한 코드가 생각한 것처럼 작동하는지 안하는지는 알고 있어야 합니다.
ㆍ대입 연산자
변수에 데이터를 저장하기 위해서 c언어에서는 대입 연산자를 사용해야 합니다. 대입 연산자는 왼쪽의 변수에 오른쪽의 값을 대입시키는 연산을 수행합니다.
int x;
x = 5;
대입연산을 수행할 때 항상 염두해야할 것은 대입되는 변수가 왼쪽에 위치하여야 한다는 점입니다. 다음과 같은 코드는 잘못된 코드입니다.
5 = x;
위의 코드는 "상수 5에 변수 x의 값을 대입하라"라는 의미를 갖습니다. 상수에 값을 대입하는 행위는 논리적으로 불가능하기때문에 위의 코드는 오류를 일으킵니다.
ㆍ산술 연산자
산술 연산자는 우리가 흔히 사용하는 사칙연산에 관련된 연산자입니다. 2개의 피연산자를 요구하며 연산결과를 반환합니다.
조금 특이한 것은 나머지 연산자인데, 두 피연산자를 나누고 난 후에 나머지값을 반환합니다. 예를 들어 5%2는 몫이 2이고 나머지 1이기 때문에 1을 반환하게 됩니다. 이러한 나머지연산자는 특정한 값으로 나누어떨어지는지 아닌지 확인하는데 유용하게 사용됩니다. 예를 들어서 6이 2로 나누어떨어지는지 확인하기 위해서는 6%2 연산을 수행하고 0이 반환되는지 확인하기만 하면됩니다.
ㆍ비교연산자
비교연산자는 두 값의 대소관계를 비교할 때 사용되는 연산자입니다. 두 피연산자의 대소관계를 비교하며 결괏값으로 참과 거짓을 반환합니다. 프로그래밍에서 기본적으로 참은 1을 의미하고 거짓은 0을 의미합니다. 그러나 상황에 따라선 참을 0이 아닌 값, 거짓을 0으로 따지는 경우도 많습니다. 따라서 참과 거짓을 판별할 때는 0인지 아닌지만 확인해주면 됩니다.
int result;
result = 5 <= 3;
5는 3보다 크기때문에 5 <= 3은 거짓입니다. 따라서 결괏값으로 0이 반환되며 result에는 0이 대입되어집니다.
ㆍ논리연산자
논리연산자는 두 피연산자의 논리적인 관계를 판단하고 비교연산자와 마찬가지로 참과 거짓중 하나를 반환합니다.
and연산
result = (5 >= 3 && 2 == 2);
or연산
result = (2 == 3 || 5 < 10);
not연산
result = !(2<5);
ㆍ증감연산자
증감 연산자는
ㆍ연산자 우선순위
수학에서 곱셈을 먼저하고 덧셈을 나중에 하는것처럼 컴퓨터에서도 연산자의 우선순위가 정해져 있습니다.
ㅇ
증감 연산자
증감 연산자는 사실 의미 자체는 덧셈, 뺄셈과 동등합니다. 단순히 1을 더하고 빼고의 일인데, 우리가 실제로 프로그램을 작성하다보면 1을 더하고 빼는 행위가 굉장히 빈번합니다. 시계를 구현하기 위해 1씩 초가 늘어나야 하며, 반복 횟수를 카운트하기 위해 반복할 때마다 카운터를 1씩 증가시켜줘야 하는 등등 1을 더하고 빼는 작업은 굉장히 빈번하게 일어나죠. 때문에 이러한 단순 덧셈뺄셈에 직관적인 표현을 제공하고자 증감 연산자가 탄생하였습니다.
증감 연산자는 살짝 복잡한 부분이 있는데, 기호를 변수의 앞에 넣어주느냐 뒤에 넣어주느냐에 따라서 결과가 조금 다릅니다. 앞에 넣어주게 되면 전위 증감 연산자라 불리며 명령문이 실행될 때 맨 처음에 증감 연산을 진행하게 됩니다. 그와 반대로 뒤에 붙여주게 되면 후위 증감 연산자라고 불리며 명령문이 전부 다 실행된 후 마지막으로 증감 연산을 진행하게 됩니다.