본문 바로가기
C언어

C언어 기초 7. C언어 연산

by algosketch 2019. 9. 7.
  • 기본 연산
  • 비교 연산
  • 논리 연산
  • 전&후위 연산자

 C언어가 기본적으로 기본 연산, 비교 연산, 논리 연산, 비트 연산, 전후위연산을 제공한다. C언어 기초편에서는 비트 연산을 제외한 나머지를 설명하도록 하겠다. 비트 연산은 활용할 일이 적고 활용하기 어렵다고 판단하여 C언어의 다음 시리즈에서 설명하기로 하였다.

1) 기본 연산

 먼저 기본 연산은 덧셈+, 뺄셈-, 곱셈*, 나눗셈/을 말하는 것이고 곱셈 기호와 나눗셈 기호를 기억하라는 것 외에는 따로 설명할 것이 없을 것 같다. 추가로 프로그래밍 언어에서 대부분 지원하는 또 하나의 중요한 연산인 모듈로(modulo) 연산이 있다. 이 연산은 나눈 나머지를 구하는 연산이며 연산 기호는 %이다. 예를 들어 10 % 3 을 하면 10을 3으로 나눈 나머지가 1이므로 10 % 3 = 1 이 된다. 여기서 중요한 특징은 N % m 을 했을 때 결과 값이 항상 m보다 작다는 점이다. 이 특징을 활용하는 경우가 많다.

 

2) 비교 연산

 비교 연산의 결과로는 참과 거짓만을 반환한다. C언어에서 참 값은 1이고 거짓 값은 0이다. 참고로 0을 제외한 모든 값은 참으로 인식하고 이 또한 활용 범위가 넓다.

 비교 연산은 크다. 작다. 같다 등의 연산이다. >, >=, ==, <=, < 연산을 지원한다. a > b, a가 b보다 크면 a > b 는 1을 반환한다. 5 > 3은 참(1)이다. 5 < 3은 거짓(0)이다. >=는 크거나 같다, <=는 작거나 같다라는 뜻이고 ==는 두 값이 같은지 비교하는 연산이다. 2 == 3 은 거짓(0)이고 2 == 2 는 참(1)이다. a가 3이고 b가 2라면 a == b 는 0이 된다. =가 아닌 ==가 비교연산인 이유는 =는 대입 연산이기 때문이다. 만약 여기서 a = b를 하면 0이 아니라 a값이 2로 바뀌게 된다.

 

3) 논리 연산

 논리 연산부터는 생소한 연산일 것이다. 논리 연산은 왼쪽 항과 오른쪽 항이 참인지 거짓인지를 가지고 하는 연산이다. and, or, xor, not이 있다. and는 논리곱, or는 논리합이라고 부른다. (실제 컴퓨터공학에서는 여기서 파생되는 xnor, nand, nor 등이 더 존재한다.)

 and연산자는 두 항 모두 참이어야 참이다. or연산자는 두 항 중 하나라도 참이면 참이다. xor 연산자는 두 항 중 하나만 참이어야 참이다. not 연산자는 현재 상태의 반대를 반환한다. 연산자는 xor를 제외하고 각각 &&, ||, !를 사용한다.

A B A and B (A && B) A or B (A || B) not A (~not) A xor B
거짓 거짓
거짓 거짓 거짓
거짓 거짓
거짓 거짓 거짓 거짓 거짓

 

4) 전&후위 연산자

 전&후위연산은 변수 값을 1증가 또는 1감소시키는 연산이다. ++와 --기호를 사용한다. a 값이 5 라고 가정하자. ++a 혹은 a++ 를 하면 a값이 1 증가하여 6이 된다. --a 혹은 a--를 하면 a 값이 1 감소하여 4가 된다. ++a, --a는 전위 연산자고 a++, a--는 후위 연산자이다. 전위 연산자는 변수의 값이 먼저 바뀌고 문장이 실행되며, 후위 연산자는 문장이 먼저 실행되고 변수의 값이 바뀐다.(정확한 표현은 C++ 연산자 오버로딩을 공부해야 한다.)

 이해는 돕기 위해 예시 코드와 결과를 보여주겠다.

int num1 = 5, int num2 = 10;

printf("%d", num1++); // 5 출력 후 num1은 6이 된다.
printf("%d", --num2); // 9가 출력된다.
printf("%d", num1+(num2++)); // 15가 출력되고 num2는 다시 10이 된다.

 

연산 연산자
기본 연산 +, -, *, /, %
비교 연산 >, >=, ==, <=, <
논리 연산 !, ||, &&
전위&후위 연산 ++n, n++, --n, n--
비트 연산 &, |, ~, ^, <<, >>

 

 2019.09.28. 대입 연산에 대해 언급을 안 했는데, 대입 연산에 대한 설명을 추가하겠다.

 대입 연산은 = 와 같은 연산을 말한다. a = 5; 는 a에 5를 대입한다는 뜻으로 대입 연산자가 사용됐다. 대입 연산자의 우선순위는 굉장히 낮고 연산 방향은 ←이다. 이게 무슨 소리냐? a = 2 + 3 이라는 코드가 있으면 +연산이 대입 연산보다 우선순위가 높기 때문에 2+3 먼저 계산 후 그 결과인 5를 a에 대입한다. 그리고 연산 방향이 ←이기 때문에 변수 a, b에 각각 5를 저장하고 싶으면 a = b = 5 처럼 작성이 가능하다. 즉, a = b보다 오른쪽에있는 b = 5가 먼저 연산된다.

 그리고 원래 설명을 추가하려 했던 이유는 += 와 같은 연산자의 소개에 있다. 물론, -=, *=, /=, ^= 등도 가능하다. 이와 같은 연산자는 코드의 길이를 줄여주고, C계열 언어 외에는 찾기 힘든 기능이다. a += 5 이 코드는 a = a + 5와 동일하다. 마찬가지로 a -= b 는 a = a - b 와 같다.