728x90
7.7 논리 연산자 Logical operators
C언어의 logical operators
&& : and
|| : or
! : not
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h> // bool 자료형 사용
#include <iso646.h>
int main()
{
bool test1 = 3 > 2 || 5 > 6; // true. or은 둘 중 하나만 참이여도 참
bool test2 = 3 > 2 && 5 > 6; // false. and는 둘 모두가 참일때만 참
bool test3 = !(5 > 6); // true. equivalent to 5 <= 6
printf("%d %d %d\n", test1, test2, test3);
/* <iso646.h>는
&& = and
|| = or
! = not 으로 대체해줌 */
bool test4 = 3 > 2 or 5 > 6;
bool test5 = 3 > 2 and 5 > 6;
bool test6 = not(5 > 6);
printf("%d %d %d\n", test4, test5, test6);
return 0;
}
Output:
1 0 1
1 0 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define PERIOD '.'
int main()
{
char ch;
int count = 0;
while ((ch = getchar()) != PERIOD) { // 마침표를 찍어야 입력이 끝남
if (ch != '\n' && ch != ' ') // 줄바꿈과 빈칸은 세지 않는다
count++;
}
printf("%d", count); // 글자수를 출력
return 0;
}
Output :
(abc def
ad . 입력)
8
a > b && b > c || b > d;
((a > b)&& (b > c)) || (b > d);
- 연산자 우선순위에 따라부등호 연산 먼저 한 후 and 계산 후 or
- 아래처럼 괄호를 넣어서 쓰는게 가독성이 좋음
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
/* Short - Circuit Evaluation */
int temp = (1 + 2) * (3 + 4); // 두 더하기 연산중 어떤게 먼저 되는가는 컴파일러에 따라 다름
printf("Before : %d\n", temp);
if (temp == 0 && (++temp == 1024)) { // 관계연산자는 왼쪽부터 오른쪽순서로 계산
}
printf("After : %d\n", temp);
return 0;
}
- ++가 있어도 temp값은 바뀌지 않음
- &&의 왼쪽이 false이면 오른쪽은 볼 필요도 없이 false이므로 오른쪽 문장은 계산을 하지 않고 넘어감. 회로의 단락과 비슷
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/* && and || are sequence points */
int main()
{
int x = 1, y = 2;
if (x++ > 0 && x + y == 4)
printf("%d %d\n", x, y);
return 0;
}
Output :
2 2
- sequence point를 만나면 그 전의 expression이 계산이 됨 -> x가 증가하고 x + y 계산 ( ;도 sequence point )
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
for (int i = 0; i < 100; ++i)
if (i >= 10 && i <= 20)
printf("%d ", i);
printf("\n");
for (int i = 0; i < 100; ++i)
if (10 <= i <= 20)
// 이 문장은 문법 오류가 아닌 문맥 오류 : if(( 10 <= i ) <= 20 ) -> ( 10 <= i )는
// 0 아니면 1임 -> 항상 성립하는 식
printf("%d ", i);
return 0;
}
Output:
10 11 12 13 14 15 16 17 18 19 20
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int main()
{
for (char c = -128; c < 127; ++c)
if (c >= 'a' && c <= 'z')
printf("%c ", c);
printf("\n");
for (char c = 0; c < 127; ++c)
if (islower(c)) // 소문자만 출력
printf("%c ", c);
return 0;
}
Output :
a b c d e f g h i j k l m n o p q r s t u v w x y z
a b c d e f g h i j k l m n o p q r s t u v w x y z
강의 출처 : https://www.inflearn.com/course/following-c/dashboard
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 7.11 최대, 최소, 평균 구하기 예제 ~ 7.13 goto를 피하는 방법 (0) | 2022.02.05 |
---|---|
[홍정모의 따라하며 배우는 C언어] 7.8 단어 세기 예제 ~ 7.10 루프 도우미 continue와 break (0) | 2022.01.28 |
[홍정모의 따라하며 배우는 C언어] 7.5 else와 if 짝짓기 ~ 7.6 소수 판단 예제 (0) | 2021.12.31 |
[홍정모의 따라하며 배우는 C언어] 7.3 ctype.h 문자 함수들 ~ 7.4 다중 선택 else if (0) | 2021.12.25 |
[홍정모의 따라하며 배우는 C언어] 7.1 분기문 if ~ 7.2 표준 입출력 함수들 getchar(), putchar() 예제 (0) | 2021.11.28 |