본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 7.7 논리 연산자 Logical operators

728x90

7.7 논리 연산자 Logical operators

 

C언어의 logical operators
	&& : and
	|| : or
	! : not

 

Truth Table for all binary logical operators

 

#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
  • 아래처럼 괄호를 넣어서 쓰는게 가독성이 좋음

C언어 연산자 우선순위

 

 

#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

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., - 강의 소개 | 인프런...

www.inflearn.com