본문 바로가기
IT/C언어

[비와이][C언어] 연산자에 대해서 알아보자 - 1

by BeeWhy 2021. 6. 26.

 이번에는 C언어에서의 연산자에 대해서 알아보겠습니다.

 

구 분 연산자 종류
대입 연산자 =
산술 연산자 +, -, *, /, %, ++, --
관계 연산자 <, >, <=, >=, ==, !=
논리 연산자 &&, ||, !
할당 연산자 +=, -=, *=, /=, %=, ...
삼항 연산자 ?
비트 연산자 &, |, ^, <<, >>

 연산자의 종류에는 위의 표와 같습니다.

 저 명칭에 대해서는 암기하지 않아도 상관없습니다. 다만, 그 기능에 대해서는 숙지하고 계셔야지만, 프로그래밍을 할 때, 써먹을 수 있고, 남이 짠 코드를 이해할 수 있습니다.

 

 대입연산자

 '=' 이 대입 연산자는 말그대로 값을 대입한다는 뜻입니다.

int a = 30;

이처럼 a라는 변수에 30이라는 값을 대입한다는 뜻입니다.

여기서 중요한 것은 수학에서의 등호 '='와는 의미가 다르다는 것입니다.

즉, '=' 오른쪽에 있는 값을 왼쪽에 있는 변수로 대입한다는 뜻이 됩니다. 절대 같다는 뜻이 아니므로 명심해야 합니다.

저 부분을 "같다"라고 생각해서 발생하는 프로그래밍에서 휴먼에러가 생각보다 상당히 많습니다. 주의가 필요합니다.

 

산술연산자

산술적, 수학적 계산을 하는데 사용되는 연산자 입니다.

#include <stdio.h>

int main(void)
{
	int a = 10;
    int result;
    
    result = a + 1;  // a 더하기 1의 결과를 result에 대입
    printf("%d + 1 = %d\n", a, result);
    
    result = a - 1;  // a 빼기 1의 결과를 result에 대입
    printf("%d - 1 = %d\n", a, result);
    
    result = a * 2;  // a 곱하기 2의 결과를 result에 대입
    printf("%d * 2 = %d\n", a, result);
    
    result = a / 2;  // a 나누기 2의 결과를 result에 대입
    printf("%d / 2 = %d\n", a, result);
    
    result = a % 3;  // a를 3으로 나눈 후 나머지를 result에 대입
    printf("%d %% 3 = %d\n", a, result);
    
    return 0;
}

기본적인 연산 기호는 보시는 바와 같습니다.

이 중에서 '%'에 printf 부분에서 '%%' 처럼 2개가 들어있는 이유는 printf에서 %는 특수기호로 사용되기 때문에 %를 출력해주려면 2번 입력해주어야 합니다.

 

그 외 ++, --가 있습니다.

++ : 변수 값에다가 +1 하여 그 변수에다가 저장한다는 의미

-- : 변수 값에다가 -1 하여 그 변수에다가 저장한다는 의미

++, --의 위치는 변수의 앞이나 뒤에 붙일 수 있습니다.

앞에 붙인 것과 뒤에 붙인 것의 결과는 다릅니다.

뒤에 붙인다면, 그 라인의 코드가 다 수행되고 나서 결과가 반영됩니다.

앞에 붙이는 경우는 먼저 연산을 해서 변수값을 저장을 하고, 그 라인의 코드를 수행합니다.

 

다음 예제 코드를 보시면 확인이 됩니다.

#include <stdio.h>

int main(void)
{
    int a = 10;
    int result;

    printf("a++의 값은 %d\n", a++); 
    // a는 10이고 printf 출력이 끝난 뒤에 더하기 1 된 결과로 저장됨
    printf("a의 값은 %d\n", a);
    // a++이 있는 printf 다음 a를 다시 출력해보면 값이 변한 게 확인됨
    
    printf("a--의 값은 %d\n", a--);
    // a는 11이고 printf 출력이 끝난 뒤에 빼기 1 된 결과로 저장됨
    printf("a의 값은 %d\n", a);
    // a--이 있는 printf 다음 a를 다시 출력해보면 값이 변한 게 확인됨


    a = 10;
    printf("++a의 값은 %d\n", ++a);
    // a 값을 1증가를 먼저 해주고 printf가 수행됨.
    printf("a의 값은 %d\n", a);
    // ++a의 결과와 같음.

    printf("--a의 값은 %d\n", --a);
    // a 값을 1감소를 먼저 해주고 printf가 수행됨.
    printf("a의 값은 %d\n", a);
    // --a의 결과와 같음.
    
    return 0;
 }

 

관계연산자

관계연산자의 결과는 참(1), 거짓(0)으로 나옵니다.

연산자 의미
a < b a는 b보다 작다.
a > b a는 b보다 크다.
a <= b a는 b보다 작거나 같다.
a >= b a는 b보다 크거나 같다.
a == b a와 b는 같다.
a != b a와 b는 다르다.

수학적인 기호와 의미가 동일합니다.

여기서 ' 같다 ' 는 '='가 2번 들어간 '==' 이고, 다르다는 '!'와 '='를 합친 '!=' 입니다.

프로그래밍에서 '!' 의 의미는 NOT 의 의미 입니다. '아니다' 라는 뜻이죠.

그리고 그 결과는 참, 거짓으로 저장이 되게 됩니다.

 

논리연산자

연산자 의미
조건1 && 조건2 조건1과 조건2 모두가 참인 경우 참
하나라도 거짓이면 결과는 거짓
조건1 || 조건2 조건1과 조건2 둘 중 하나라도 참이면 참
모두 거짓이면 결과는 거짓
! 조건1 조건1의 결과를 반대로 뒤집는다.
조건1이 참이면 결과는 거짓으로 바꿈
조건1이 거짓이면 결과는 참으로 바꿈

논리연산자에서 조건은 관계 연산자로 된 식을 주로 반영해서 많이 사용합니다.

예를 들면 

1 < x < 5

이 기호의 뜻은 "x는 1보다 크고, 5보다 작다" 입니다.

이를 C언어의 논리 연산자로 나타내면 다음과 같습니다.

( x > 1 ) && ( x < 5 )

x <= 5 or x > 10

이 기호의 뜻은 "x는 5이하 이거나 또는 x는 10보다 크다' 입니다.

이를 C언어 논리 연산자로 나타내면 다음과 같습니다.

( x <= 5 ) || ( x > 10 )

! 기호는 수학에서 특히 함수에서 여집합과 같다고 보시면 됩니다.

#include <stdio.h>

int main(void)
{
    int a = 3;

    printf("a == 3의 결과는 %d\n", a == 3);
    printf("!(a == 3)의 결과는 %d\n", !(a == 3));
   
    return 0;
 }

 

 

할당, 삼항, 비트 연산자는 다음 포스트에서 이어가겠습니다.

댓글