본문 바로가기
c언어

c언어 관계 연산자에 대하여 알아보기

by 개발자 L 2022. 12. 2.
반응형

c언어 관계 연산자에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 c언어 관계 연산자에 대하여 알아보는 시간을 가져보려 합니다.

관계 연산자는 서로 다른 두 개의 피연산자를 비교를 할 때 많이 씁니다.

예를 들어 '크다', '작다', '같다'와 같은 것들이 여기에 속하죠.

그래서 이번 포스팅에서는 c언어에서 사용하는 관계 연산자들은 어떤 것들이 있는지, 그리고 어떻게 사용을 하는지 간단한 예제를 통하여 알아보려 합니다.

그럼 지금부터 함께 보시죠!

 

1. 관계 연산자

관계 연산자는 앞서 말했듯이 두 개의 피연산자를 비교할 때 쓴다고 했습니다.

예를 들어 a와 b가 있는데, 이 둘을 비교한다고 해봅시다.

이 두개에 대하여 나타낼 수 있는 것들이 있죠?

같다, 같지 않다, 크다, 작다, 크거나 같다, 작거나 같다..

이러한 것들이 있을 겁니다.

이들은 우리가 수학 시간에 한 번씩은 본 적이 있죠?
c언어에서도 수학적인 수식들과 연산자들을 많이 씁니다.

그러면 이들을 어떤 식으로 표현을 할까요?
간단한 표와 함께 같이 봅시다.

연산 의미
x == y x와 y가 같은가?
x != y x와 y가 같지 않은(다른)가?
x > y x가 y보다 큰가?
x < y x가 y보다 작은가?
x >= y x가 y보다 크거나 같은가?
x <= y x가 y보다 작거나 같은가?

보통 우리가 쓰는 관계들에 대한 연산자들입니다.

보시면 우리가 수학적으로 표기를 하는 것과는 사뭇 다른 부분들이 보입니다.

프로그래밍 언어에서는 우리가 글을 쓸 때 쓰는 수식을 표현할 수 없기 때문에 이를 대체할 수식을 정의하여 약속을 했습니다.

그래서 수학적 표기와 혼동되어서는 안 되니 꼭 주의해주세요.

그리고 관계 연산자의 가장 큰 특징은 결과값이 참 또는 거짓으로 나온다는 점입니다.

그 이유는 관계 연산자를 써서 나오는 모든 값들은 ~이다, 또는 ~가 아니다로 나오기 때문에,

절대로 참 또는 거짓만이 나올 수 밖에 없습니다.

그럼 이들을 어떻게 사용을 하는 지 간단한 예제를 통하여 한 번 알아볼까요?

#include <stdio.h>

int main()

{
    int x, y;

    printf("두 개의 정수를 입력하세요 : ");
    scanf("%d %d", &x, &y);

    printf("x == y의 결과값 : %d\n", x == y);
    printf("x != y의 결과값 : %d\n", x != y);
    printf("x > y의 결과값 : %d\n", x > y);
    printf("x < y의 결과값 : %d\n", x < y);
    printf("x >= y의 결과값 : %d\n", x >= y);
    printf("x <= y의 결과값 : %d\n", x <= y);

    return 0;
}

이렇게 간단한 예제를 만들어봤습니다.

우리가 관계 연산자의 결과값은 참 또는 거짓으로 표현된다고 했었죠?
프로그래밍 언어에서 참과 거짓은 2진수로 표현을 하는데, 참이면 1이 나오고, 거짓이면 0이 나옵니다.

이를 이용하여 참 또는 거짓 여부를 판단을 합니다.

그럼 결과는 어떻게 나왔는지 한 번 보도록 하겠습니다.

두 개의 정수를 입력하세요 : 4 5
x == y의 결과값 : 0
x != y의 결과값 : 1
x > y의 결과값 : 0
x < y의 결과값 : 1
x >= y의 결과값 : 0
x <= y의 결과값 : 1

저는 4와 5를 입력해서 결과를 받았습니다.

보시는 바와 같이 이렇게 값이 문제없이 잘 나왔음을 보실 수 있습니다.

반응형

 

2. 관계 연산자 사용 시 주의사항

관계 연산자를 사용하다 보면 잔실수를 하는 경우가 많이 발생을 합니다.

우리가 프로그래밍 언어를 쓰는 것이 아니라, 실생활에서 쓰이는 언어와 혼동을 하여 그러한 언어를 기입했을 경우에 많이들 생겨납니다.

그리고 프로그래밍 언어 내에서 정의된 약속을 어기는 경우에도 많이 생깁니다.

그러면 어떤 주의사항이 있을까요?
함께 알아봅시다.

 

2 - 1. =와 ==의 혼동

c언어에서는 등호 한 번의 의미는 대입 연산자입니다.

그래서 =를 쓰면 '값을 저장하겠다'는 의미가 됩니다.

그래서 ==이 가지는 의미인 '같다' 와는 전혀 다른 의미가 됩니다.

 

2 - 2. 연속적인 비교를 하고싶다면 논리 연산자를 이용해야 한다.

하나의 수식을 예로 들어보겠습니다.

2 < x < 5

이러한 수학적 수식이 있다고 해봅시다.

우리가 수학적으로 보면 2초과 5 미만입니다.

전혀 문제가 없는 수식이지만, c언어에서는 문제가 일어나는 케이스에 해당합니다.

이렇게 쓰면 전혀 예상치 못했던 쓰레기 값이 나오기 때문에 절대 쓰면 안 됩니다.

대신에 이렇게 써야 합니다.

(2 < x) && (x < 5)

이렇게 '그리고'를 나타내는 and 연산자인 '&&'를 써야만 식이 성립이 됩니다.

이는 나중에 논리 연산자를 포스팅할 때 자세히 다루도록 하겠습니다.

 

2 - 3. 실수를 비교하는 경우에도 이상한 값이 나오곤 한다.

제가 전에 실수에 관한 포스팅을 한 적이 있는데,

거기에서 언급했던 것 중 하나가 숫자의 유효 범위가 있다고 그랬었습니다.

그래서 실수형을 나타내는 자료형인 float형은 6자리, double형은 16자리이기 때문에 그 이상의 범위로 벗어나면 수가 이상해집니다.

그래서 정확한 비교를 하기 위해서는 fabs()라고 불리는 실수의 절댓값을 구하는 함수를 이용해야 합니다.

이런 식으로 표기를 합니다.

fabs(x - y) < 0.0001;

이렇게 써야만 오류 없이 값을 구할 수 있습니다.

 

2 - 4. 순서를 뒤바꿔 표기하여 오류가 발생하기도 한다.

관계 연산자의 표기는 하나의 약속입니다.

그래서 절대로 깨어지면 안 되며, 공백이 없는 곳은 공백도 없어야만 오류가 발생하지 않습니다.

제가 몇 가지 예를 들어보겠습니다.

x =< y; // 순서가 뒤바껴서 오류
x < = y; // 관계 연산자 사이에 공백이 존재해서 오류
x << y : // << : 비트 이동 연산자이기 때문에 관계 연산자로써 쓸 수가 없음.

이러한 오류들이 빈번히 일어나곤 합니다.

그래서 코드 작성 시 혼동하지 않도록 주의를 기울여야 합니다.

 

2 - 5. 변수와 상수를 비교할 때 오류가 생길 수 있다.

우리가 보통 변수와 변수를 비교를 하지만, 변수와 상수를 비교할 때도 생깁니다.

그럴 경우에는 우리가 에러가 나지 않도록 일종의 장치를 걸어둡니다.

예를 들어서 우리가 1과 x를 비교한다고 가정을 해봅시다.

그럴 경우에는 이렇게 비교를 합니다.

1 == x;

이렇게 상수를 먼저 적고서 변수를 씁니다.

그 이유는 변수를 먼저 적고서 상수를 적어도 상관은 없지만, 혼동으로 인한 오류가 날 수 있기 때문에 안전하게 상수를 바깥으로 먼저 빼내는 것입니다.

그리고 여기서도 절대로 등호를 1개만 쓰면 안 되니 주의해주세요.

컴파일 오류가 납니다!

 

여기까지 c언어 관계 연산자에 대하여 알아보았습니다.

다음 포스팅에서는 c언어 논리 연산자에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다 ~

반응형

댓글