3-4 논리 연산자


여러 개의 조건을 조합하여 참인지 거짓인지를 따질 때 사용.

연산 

의미 

x && y 

 AND 연산

x || y 

 OR 연산

!x 

NOT  


이러한 논리 연산자들은 여러 개가 동시에 사용될 수 있다. 


1
2
3
(x == 1|| (x == 2|| (x == 3// x는 1, 2, 3중에 하나이다.
 
(x >= 60&& (x < 100// x가 60이상 100 미만이다.
cs



NOT 연산자의 경우 피연산자의 값이 참이면 연산의 결과값을 거짓으로 만들고, 피 연산자의 값이 거짓이면 연산의 결과값을 참으로 만든다.


1
2
!0 // 결과값은 1
!(x + y) // 수식 (x+y)의 값이 0이면 1, 1이면 0
cs


NOT 연산자는 0이 아닌값에 적용하면 0으로 만든다. 다음과 같은 경우도 모두 0이다.

1
2
!100 // 100도 참으로 취급
!-3 // 음수도 참으로 
cs



또한 NOT은 두 번 적용시켜도 원래의 상태가 되지 않는 경우도 있다.

1
!!3 // 값은 1이다.
cs

!!3은 !(!3)이다. !3은 0이기때문에 주어진 수식은 !0과 같고 최종적으로 1이 된다.



위 글에서 눈치 챘겠지만 관계 수식이나 논리 수식은 0=거짓 1=참이다.

하지만, 피연산자의 경우에는 0=거짓 !0=참이다. 당연히 음수도 참이다.



ex) 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    int x, y;
 
    printf("두개의 정수를 입력하시오: ");
    scanf("%d %d"&x, &y);
 
    printf("%d && %d의 결과값 : %d\n", x, y, x && y);
    printf("%d || %d의 결과값 : %d\n", x, y, x || y);
    printf("!%d의 결과값 : %d\n", x, !x);
 
    return 0;
}
cs


두개의 정수를 입력하시오: 1 0  

1 && 0의 결과값 : 0  

1 || 0의 결과값 : 1  

!1의 결과값 : 0  


D:\[work]\Visual Studio\Project2\Debug\Project2.exe(1824 프로세스)이(가) 0 코드로 인해 종료되었습니다.  

이 창을 닫으려면 아무 키나 누르세요.  



이러한 피연산들중 &&(AND)연산의 경우 처음 피연산자의 값이 거짓이면 다른 피연산자들은 계산되지 않는다.

ex)

1
2 > 3 ) && ( ++< 5 );
cs

2 > 3 이 거짓이기 때문에 ++< 5 는 계산되지 않는다.


이러한 과정을 단축 계산 이라고한다.


----------------------------LAB 

[윤년을 계산하는 프로그램을 작성하시오]


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main()
{
    int year, result;
 
    printf("연도를 입력하시오 : ");
    scanf("%d"&year);
 
    result = ((year % 4 == 0&& (year % 100 != 0)) || (year % 400 == 0);
    printf("reselt=%d \n", result)
    return 0;
}
cs



연도를 입력하시오 : 2012  

reselt=1  


D:\[work]\Visual Studio\Project2\Debug\Project2.exe(10244 프로세스)이(가) 0 코드로 인해 종료되었습니다.  

이 창을 닫으려면 아무 키나 누르세요.  

'C 프로그래밍 > 3. 수식과 연산자' 카테고리의 다른 글

3-6 콤마 연산자 , 3-7 비트 연산자  (1) 2019.05.14
3-5 조건 연산자  (0) 2019.05.14
3-3 관계 연산자  (0) 2019.05.14
3-2 산술 연산자  (0) 2019.05.14
3-1 수식과 연산자  (0) 2019.03.31