cs 2. C 연산자와 변수 (C변수선언, C연산자, C 수학연산, C 산술, C산수, 비교, 논리, and, or) :: 맥스웰과 데자와

 

1. 연산자와 변수

 

 수학에서와 마찬가지로 프로그램을 짤 때 변수나 값의 연산을 위해 사용되는 부호를 '연산자(operator)'라고 합니다. 예를들어 1+2나 2-1 에서 +, -을 연산자라고 합니다. 그렇다면 이렇게 연산한 값(가령 3과 1)은 컴퓨터에 어떻게 저장해야 할까요? 

C언어는 이를 목적으로 변수라는 것을 제공하고 있습니다. C언어에서 '변수(variable)'란 값을 저장할 수 있는 메모리 공간에 붙은 이름, 혹은 메모리 공간 자체를 가리킵니다.

 

 

다음은 연산자 + 를 사용하여 1+2의 값을 계산한 것입니다. 실행결과에 덧셈의 결과가 출력되지 않았습니다. 프로그램 내에 덧셈을 요구하는 문장은 있지만, 출력을 요구하는 문장은 없기 때문입니다. 여기서 변수를 만들면, 그 변수의 이름을 통해서 값이 저장되고 그 변수의 출력을 요구할 수 있습니다.

 

 

num 이라는 변수를 선언하고 그 변수를 printf하니 3이라는 결과가 출력된 것을 볼 수 있습니다.

위 코드에서 보이듯이 다음 문장이 변수의 선언문입니다.

 

int num;

 

그리고 int와 num이 의미하는 바는 각각 다음과 같습니다.

 

  int   정수의 저장이 가능한 메모리 공간을 할당합니다.
  num   그 메모리 공간의 이름을 num이라 합니다.

 

즉 변수의 type에 알맞는 메모리 공간을 할당한 다음, 그 공간의 이름을 정해주면 변수를 선언할 수 있습니다. 

 

선언된 변수에 처음 값을 저장하는 것을 '초기화'라고 하고 초기화 이후에 저장된 값을 변경할 때는 '대입'이라고 합니다.

또한 아래의 num3, num4와 같이 선언과 동시에 초기화하는 것이 가능합니다.

 

 

변수선언 시 주의해야할 것은 중괄호 내에 변수를 선언할 경우, 변수의 선언문은 중괄호의 시작부분에 위치해야한다는 것입니다. 즉, 다음과 같은 코드는 컴파일 에러를 발생시킵니다.

 

 

 

 

2. C언어의 다양한 연산자

 

C언어에서 제공하는 연산자 대부분은 수학적 연산기능을 제공하기 때문에 쉽게 익힐 수 있습니다.

 

 

(1) 대입 연산자(=)와 산술 연산자(+,-,*,/,%)

 

연산자 기능
=   연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입한다.
  ex) num1 = 1;
+   두 피연산자의 값을 더한다.
  ex) num = 2+1;
-   두 피연산자의 값을 뺀다.
  ex) num = 2-1;
*   두 피연산자의 값을 곱한다.
  ex) num = 2*1;
/   두 피연산자의 값을 나눈다.
  ex) num = 2/1;
%   두 피연산자의 값을 나눴을 때 얻게 되는 나머지를 반환한다.
  ex) num = 2%1;

 

 

(2) 복합 대입 연산자

 

연산자 동일연산 연산자
a = a+ b <-> a += b
a = a - b <-> a -= b
a = a * b <-> a *= b
a = a / b <-> a /= b
a = a % b <-> a %= b

 

 

(3) 증가, 감소 연산자

 

증가, 감소 연산자는 변수에 저장된 값을 1 증가 및 감소시킵니다. 활용빈도가 높으니 예시를 잘 확인해주세요!

 

연산자 기능
++num 값을 1 증가 후, 문장 나머지 진행 (선 증가, 후 연산)
num++ 문장 먼저 진행 후, 값을 1 증가 (선 연산, 후 증가)
--num 값을 1 감소 후, 문장 나머지 진행 (선 감소, 후 연산)
num-- 문장 먼저 진행 후, 값을 1 감소 (선 연산, 후 감소)

 

 

첫 번째 예시는 ++num입니다.

6행에서 변수 num1은 '선 증가, 후 연산'을 진행하고 있습니다. 즉, num1 = 1에 선 증가로 +1을 해준 후(num1 = 2), 후 연산으로 num2 = (++num1) + 1 = (2) + 1 = 3 을 계산하였습니다.

 

 

두 번째 예시는 처음과 반대되는 num++입니다.

6행에서 변수 num1은 '선 연산, 후 증가'를 진행하고 있습니다. 즉, 선 연산으로 num2 = (num1++) + 1 = (1) + 1 =2를 해준 후(아직 num1은 증가하지 않았습니다), 후 증가로 num1++ = 1+1 =2 으로 정의합니다.

 

 

(4) 관계 연산자

 

관계 연산자는 대소와 동등의 관계를 따지는 연산자입니다. 비교 연산자라고도 합니다. 아래의 관계 연산자들은 조건을 만족하면 1(true)을, 만족하지 않으면 0(false)를 반환합니다.

 

연산자 기능
a > b a는 b보다 크다.
a < b a는 b보다 작다.
a == b a와 b는 같다.
a != b a와 b는 같지않다.
a >= b a는 b보다 크거나 같다.
a <= b a는 b보다 작거나 같다. 

 

 

 

(5) 논리 연산자

 

연산자 기능
&& and
|| or
! not

 

 

여기서 !num1은 무엇을 의미할까요? C언어는 0이 아닌 모든 값을 참(true)로 간주합니다. 즉, 거짓(false)를 의미하는 숫자는 0이 유일하고 나머지 숫자는 참으로 인식합니다. 따라서 참이 아닌(!num1) 것의 결과로 거짓 = 0 이 반환되는 것입니다. 

 

 

 

참고자료 : 윤성우, 「열혈 C프로그래밍」, ORANGE MEDIA, 2013

 

 

+ Recent posts