여러 개의 조건을 조합하여 참인지 거짓인지를 따질 때 사용.
연산 |
의미 |
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 ) && ( ++x < 5 ); | cs |
2 > 3 이 거짓이기 때문에 ++x < 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 |