티스토리 뷰
2021.04.14 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 1
저번 포스트에서 이어지는 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);
}
실행하면 위와 같은 결과를 볼 수 있습니다.
형태는 조금 생소하지만 동작은 잘 되죠?
이제 마지막으로 비트 연산자가 남았는데
글이 길어지고 있어서 다음 포스트에서 이어서 작성하도록 하겠습니다.
다음 포스트에서 만나요!
'코딩 공부 > C 언어' 카테고리의 다른 글
C 언어로 만든 미로찾기 소스 (6) | 2021.04.18 |
---|---|
C 언어 기초 : 연산자 3 - 비트 연산자 (0) | 2021.04.16 |
C 언어 기초 : 연산자 1 (0) | 2021.04.14 |
C 언어 기초 : scanf 함수 문제 정답 (0) | 2021.02.14 |
C 언어 기초 : scanf 로 원하는 데이터 입력 받기 (0) | 2021.02.07 |
- Total
- Today
- Yesterday
- DFS
- 그리디
- 문제풀이
- dp
- BFS
- hackerrank
- 프로그래밍
- 기초
- greedy
- 해커랭크
- 하드웨어
- 백준
- 알고리즘
- 애플
- 코딩공부
- 캐나다생활
- 컴퓨터사이언스
- c++
- C언어기초
- 컴퓨터
- 너비우선탐색
- 캐나다
- 스위프트플레이그라운드
- 깊이우선탐색
- 영어공부
- 컴퓨터공부
- c언어
- 다이나믹프로그래밍
- 아이패드
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |