C & C++/윤성우의 열혈 C 프로그래밍

[열혈 C] 논리 연산자와 콤마 연산자

거북이 코딩 2023. 10. 3. 17:52

관계 연산자

 

연산자 연산자의 기능
< 예) n1 < n2
n1이 n2보다 작은가?
> 예) n1 > n2
n1이 n2보다 큰가?
== 예) n1 == n2
n1과 n2가 같은가?
!= 예) n1 != n2
n1과 n2가 다른가?
<= 예) n1 <= n2
n1이 n2보다 같거나 작은가?
>= 예) n1 >= n2
n1이 n2보다 같거나 큰가?

 위의 관계 연산자들은 조건을 만족하면 1을 만족하지 않으면 0을 반환한다. 여기서 1은 참(true)을 뜻하고 0은 거짓(false)을 뜻한다.

 

논리 연산자

 

논리 연산자 연산자의 기능
! 예) !A
A가 참이면 거짓, A가 거짓이면 참을 반환(논리 NOT)
&& 예) A && B
A와 B 모두 참이면 연산결과로 참을 반환(논리 AND)
|| 예) A || B
A와 B 둘 중 하나라도 참이면 연산결과로 참을 반환(논리 OR)

 

 논리 연산자 !의 예제를 보자.

#include <stdio.h>

int main(void)
{
    int num1 = 10;
    int result;
    result = (!num1);
    printf("result: %d \n", result);
    return 0;
}
result: 0

 위의 예제에서 num1 에는 0도아니고 1도 아닌 10이라는 숫자가 저장되어있다. 그렇다면 왜 논리연산자 !는 거짓을 반환한 것일까? C언어는 0이 아닌 모든 값을 참(true)으로 간주하기 때문이다. 따라서 예제에서는 10이라는 숫자가 참으로 인식되어 거짓이 반환된 것이다.

 

콤마 연산자( , )

 

 콤마 연산자는 둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행에 삽입하는 경우에 사용되는 연산자이다. 뿐만 아니라, 둘 이상의 인자를 함수로 전달할 때도 인자의 구분을 목적으로 주로 사용된다. 그럼 다음 예제를 통해서 콤마 연산자가 사용된 예를 보이겠다.

#include <stdio.h>

int main(void)
{
    int num1 = 1, num2 = 2;
    printf("Hello "), printf("world! \n");
    num1++, num2++;
    printf("%d ", num1), printf("%d ", num2), printf("\n");
    return 0;
}
Hello world!
2 3