티스토리 뷰

반응형

2021.04.14 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 1

 

C 언어 기초 : 연산자 1

2021.02.07 - [코딩 공부/C 언어] - C 언어 기초 : scanf 로 원하는 데이터 입력 받기 C 언어 기초 : scanf 로 원하는 데이터 입력 받기 이전 글 2021/02/06 - [코딩 공부/C 언어] - C언어 기초 : 암시적 형변환과..

hgu-can.tistory.com

저번 포스트에서 이어지는 C 언어 기초 연산자 파트 2입니다. 


1. 관계 연산자

두 값의 대소관계를 비교하여 거짓을 구분하는 연산자

거짓은 0이며 참은 0을 제외한 모든 수를 의미

 

관계 연산자를 썼을 때 두 값을 비교해보고 거짓이면 컴퓨터에게 0이라고 알려주고 0이 아닌 숫자라고 알려주면 컴퓨터가 이건 참이구나 하는 것이랍니다. 

컴퓨터는 0과 1로 판단하니까요. 

 

연산자 의미
a > b a가 b보다 크다.
a < b a가 b보다 작다.
a >= b a가 b보다 크거나 같다.
a <= b a가 b보다 작거나 같다.
a == b a와 b가 같다.
a != b a와 b가 같지 않다.

프로그래밍에서 사용하는 관계 연산자에는 위와 같은 것들이 있습니다. 

대소관계를 비교하는 연산자는 수학시간에도 많이 썼던 것들이라 익숙하시죠?

관계 연산자는 앞으로 프로그래밍을 하다보면 정~~~말 많이 사용하기 때문에 외우려 노력하지 않아도 알아서 외워집니다.

 

관계 연산자에서 하나 기억하실 점은 두 값이 같다는 것을 의미할 땐

= 하나만 쓰는 것이 아닌

== 두 개를 붙여서 써야 한다

는 점입니다. 

 

수학시간엔 1 + 1 = 2

같은 형태로 두 값이 같다는 뜻으로 = 하나만 썼었지만

프로그래밍에선 = 하나는 대입 연산자로 쓰기 때문이에요. 

int a = 10;

이런 식으로 변수에 어떤 값을 넣어줄 때 = 하나만 써서 대입 연산자로 사용하기 때문에

두 값이 같다는 뜻으로 쓸 때엔 꼭 == 두개를 붙여 써서 컴퓨터에게 관계 연산자를 쓰는 것이라고 알려줍시다. 

저게 나중에 별 생각없이 코드를 쓰다 보면 조건식에서 == 를 써야 하는 상황에서 가끔 = 하나만 쓰고 왜 동작이 제대로 안 되지? 하는 경우가 생기기 때문에...ㅋㅋㅋ(제 얘기)

두 값이 같다는 뜻으로 쓸 땐 꼭 == 두 개 붙여서 쓰세요!

 

그리고 프로그래밍에서 ! 는 아니다! 라는 뜻으로 사용되기 때문에 

두 값이 같지 않다! 라고 표현하고 싶으면 != 를 사용합니다. 

 

그럼 아래 예제를 쓰고 실행해봅시다. 

#include<stdio.h>

void main()
{
	float FNum1 = 10.1, FNum2 = 10.2;
	printf("FNum1 >= FNum2 = %d\n", FNum1 >= FNum2);
	printf("FNum1 <= FNum2 = %d\n", FNum1 <= FNum2);
	printf("FNum1 == FNum2 = %d\n", FNum1 == FNum2);
	printf("FNum1 != FNum2 = %d\n", FNum1 != FNum2);
}

실행하면 위와 같은 결과를 볼 수 있습니다. 

첫번째와 세번째 코드는 비교했을 때 거짓이니까 0이 나오고

두번째와 네번째는 비교한 결과가 참이니까 1이 나왔습니다. 

 

 

2. 논리 연산자

여러 조건들 사이에 참과 거짓의 결과값을 결정하는 연산자

 

연산자 의미
&& AND, 둘 다 참일 때
|| OR, 둘 중 하나라도 참일 때
! NOT, 거짓일 때

논리 연산자에는 세 가지가 있는데 두번째 || OR 연산자는 좀 생소하시죠?

|| 연산자 쓰는 방법은

키보드에서 엔터키 바로 위에 보면 | \ 두 개가 써진 키가 있어요. 

쉬프트를 누르고 저 버튼을 누르면 | 가 써집니다. 

쉬프트 안 누르면 \ 역슬래시~

 

그럼 아래 예제를 쓰고 실행해봅시다. 

#include<stdio.h>

void main()
{
	int Num1 = 10, Num2 = 5;
	printf("(Num1 > Num2) && (Num1 == 10) = %d\n", Num1 > Num2 && Num1 == 10);
	printf("(Num1 > Num2) && (Num1 != 10) = %d\n", Num1 > Num2 && Num1 != 10);
	printf("(Num1 > Num2) || (Num1 != 10) = %d\n", Num1 > Num2 && Num1 != 10);
	printf("(Num1 < Num2) || (Num1 != 10) = %d\n", Num1 < Num2 && Num1 != 10);

	printf("!(Num1 < Num2) = %d\n", !(Num1 < Num2));
	printf("!Num1 = %d\n", !Num1);
}

실행하면 위와 같은 결과를 볼 수 있습니다. 

정수 Num1과 Num2를 비교해서 참인 것은 1

거짓인 것은 0

이라는 결과값을 보여줍니다. 

 

그럼 아래 예제도 한 번 써 볼까요?

#include<stdio.h>

void main()
{
	int Num1 = 10, Num2 = 1;	

	printf("(Num1 > 5) && (Num2 = 1)  = %d\n", Num1 > 5 && (Num2++));
	printf("Num2 = %d\n", Num2);
	printf("(Num1 < 5) && (Num2 = 1)  = %d\n", Num1 < 5 && (Num2++));
	printf("Num2 = %d\n", Num2);
	printf("(Num1 > 5) || (Num2 = 1)  = %d\n", Num1 > 5 || (Num2++));
	printf("Num2 = %d\n", Num2);
	printf("(Num1 < 5) || (Num2 = 1)  = %d\n", Num1 < 5 || (Num2++));
	printf("Num2 = %d\n", Num2);
}

실행하면 이런 결과값을 볼 수 있습니다. 

첫번째줄부터 거짓같은데 왜 참일까요?

그리고 Num2는 왜 늘어나다말다 할까요?

 

그 비밀은 바로....

&&와 || 연산자는 앞에서부터 조건을 확인한 후 다음 조건으로 넘어가는데

&& 연산자는 조건 두 개가 다 맞아야 하고

|| 연산자는 조건 하나만 맞으면 됩니다. 

 

첫번째 줄에서 && 연산 중 첫번째 조건인 Num1 > 5 가 참이기 때문에 

다음 조건도 확인하러 갑니다. 

다음 조건은 Num1을 1증가시키는 것이니까 증가시키고 참(1)을 반환했습니다. 

 

하지만 두번째 줄에선 && 연산 중 첫번째 조건인 Num1 < 5 부터 거짓이기 때문에

다음 조건은 확인하러도 가지 않고 다음 코드로 넘어간 것이죠. 

둘 다 맞아야 하는데 처음부터 틀린거 다음꺼까지 볼 필요가 없으니까요. 

 

그리고 세번째 줄 || 연산으로 와서는 첫번째 조건인 Num1 > 5 가 참이라서 

다음 조건은 확인하지 않았습니다. 

그래서 참(1)은 반환했지만 Num2가 증가되지는 않았죠. 

|| 연산은 둘 중 하나만 맞으면 되니까 앞에꺼 맞으면 뒤에는 확인할 필요가 없습니다. 

 

마찬가지로 마지막 줄에서는 첫번째 조건(Num1 < 5)이 거짓이라 다음 조건은 참인지 거짓인지 확인하러 갔기 때문에 Num2가 증가된 것이죠. 

 

 

3. 조건 연산자

조건식의 참, 거짓 여부를 조사하여

참인 경우 : 식1

거짓인 경우 : 식2

를 수행한다.

 

조건식 ? 식1 : 식2

기본 형태는 위와 같습니다. 

 

아래 예제를 써 봅시다. 

#include<stdio.h>

void main()
{
	int Num1 = 10, Num2 = 5;

	(Num1 % 2 == 0) ? printf("%d는 짝수\n", Num1) : printf("%d는 홀수\n", Num1);
	(Num2 % 2 == 0) ? printf("%d는 짝수\n", Num2) : printf("%d는 홀수\n", Num2);
}

실행하면 위와 같은 결과를 볼 수 있습니다. 

형태는 조금 생소하지만 동작은 잘 되죠?

 


이제 마지막으로 비트 연산자가 남았는데

글이 길어지고 있어서 다음 포스트에서 이어서 작성하도록 하겠습니다. 

다음 포스트에서 만나요!

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함