인삿말
안녕하세요 알다브입니다.
다들 잘 지내고 있나요?
잠잠해진 것 같던 코로나가 요즘
또 다시 문제죠 ㅜㅜ
참.. 언제쯤 나아질련지 모르겠습니다..
저번 글로 상수까지 알아봤는데요
이번 시간에는 연산자에 대해 알아보겠습니다.
잘 따라와주세요!
2020/05/12 - [프로그래밍언어/c언어] - C언어 독학 #5. 상수 변하지 않는 데이터
연산자의 종류
연산자의 종류를 나타내는 표입니다.
연산자에 대해 설명할 때 이 표를 참조하고
보시면 되겠습니다.
대입 연산자
대입 연산자는 프로그래밍을 하면서
제일 많이 쓰는 연산자라고 볼 수 있습니다.
변수에 값을 저장할 때 쓰는 연산자입니다.
int a=1;
주의할 점은 a는 1과 같다
라고 해석하면 안 된다는 것입니다.
산술 연산자
+(더하기)
-(뺴기)
*(곱하기)
/(나누기)
%(나머지)
#include<stdio.h>
int main() {
printf("%d\n", 8 + 3);
printf("%d\n", 8 - 3);
printf("%d\n", 8 * 3);
printf("%d\n", 8 / 3);
printf("%d\n", 8 % 3);
return 0;
}
8과 3을 피연산자로 써서
각각의 연산 결과를
출력한 코드 입니다.
8 = 2*3+2
나누기 연산자의 몫은
2
나머지 연산자의 값은
2가 됩니다.
복합 대입 연산자
a+=b -> a=a+b
a-=b -> a=a-b
a*=b -> a=a*b
a/=b -> a=a/b
a%=b -> a=a%b
오른쪽의 수식이
왼쪽의 수식으로 간략히 표현된
것입니다.
여기서 주의할 점은 연산 순서입니다.
a=a+b
는 a+b의 연산을 하고
변수 a에 이 값을
저장하라는 의미입니다.
#include<stdio.h>
int main() {
int a = 10;
int b = 10;
a *= 2;
b = b * 2;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
변수 a와 b에 같은 값을 저장하고
그 결과를 확인해볼까요?
이렇게 결과가 같다는 것을
확인할 수 있습니다.
우리는 저렇게 간략히
표현된거라고 이해하면 되지만
컴퓨터는 다른 연산자로
인식하기 때문에
연산을 한 번 밖에 하지 않는 복합 대입 연산자가 더 효율적이라고 할 수 있습니다!
증감 연산자
++a 선 증가, 후 연산
a++ 선 연산, 후 증가
--a 선 감소, 후 연산
a-- 선 연산, 후 감소
처음 증감 연산자를 접하신 분들은
이 의미가 무슨 차이가 있나 싶겠지만
어떻게 사용하느냐에 따라
차이가 아주 크답니다!
++a와 a++는 a=a+1이지만
++a는 a+1연산을 한 후
대입연산을 하는 것이고
a++는 대입연산을 한 후
a+1연산을 하는 것입니다.
설명으로는 이해가 잘 안 될 수도
있으니 코드로 설명해보도록 할게요.
#include<stdio.h>
int main() {
int a = 10;
int b;
b = ++a;
printf("%d\n", a);
printf("%d\n\n", b);
b = a++;
printf("%d\n", a);
printf("%d\n\n", b);
return 0;
}
a에는 10이 저장되어있고
b=++a;
연산을 통해 값을 받습니다.
과연 b에는 어떤 값이 저장될까요?
선증가, 후대입이기 때문에
a가 1이 증가되고,
b에 그 값이 저장이 됩니다.
b=a++;
이 연산은 선대입, 후증가이기 때문에
먼저 대입을 한 후 a가 1
증가하게 됩니다.
이해가 가시나요?
한 번 직접 코딩해보시고
결과를 확인해봐요!
차이를 아시겠나요?
a가 선증가, 후대입
a=10 -> a=11
b=a
따라서 a=11, b=11
아래는 a가 선대입, 후증가
b=a
a=11 -> a=12
이해되시죠??
관계 연산자
a>b
> 부등호가 언제 쓰일까요?
바로 a와 b의 크기를 비교할 때
a가 b보다 크다는 것을 나타낼 때
쓰이죠.
c언어에서 이 부등호는
관계연산자로 a가 b보다 클지를
비교해서 참이면 1로 표현하고
거짓이면 0으로 표현하게 됩니다.
a<=b 는 a가 b보다 작거나 같은지를
비교하는 연산이고
a==b는 a와 b가 같은지를 비교하는
연산입니다.
(=이 아닙니다.)
a!=b는 a와 b가 다른지를 비교하는
연산입니다.
#include<stdio.h>
int main() {
int a = 10;
int b = 5;
printf("a>b? %d\n", a > b);
printf("a==b? %d\n", a == b);
printf("a!=b? %d\n", a != b);
return 0;
}
a=10과 b=5로
각 관계연산을 해
출력한 프로그램입니다.
각각 참, 거짓에 맞게
출력된 것을 확인 할 수 있습니다.
논리 연산자
&& = AND 연산자, 논리곱
|| = OR 연산자, 논리합
! = NOT 연산자, 논리 부정
&&는 말 그대로 그리고의 의미입니다.
피연산자가 둘 다 참이어야만
참이 됩니다.
0 && 0 = 0
0 && 1 = 0
1 && 0 = 0
1 && 1 = 1
||는 말 그대로 또는의 의미입니다.
피연산자가 한 개만 참이어도
참이 됩니다.
0 || 0 = 0
0 || 1 = 1
1 || 0 = 1
1 || 1 = 1
!는 결과를 반전시킵니다.
! 0 = 1
! 1 = 0
위에서 배운 관계연산자를
활용해서 논리연산자를
사용해볼까요?
#include<stdio.h>
int main() {
int a = 10;
int b = 5;
printf("a>b && a!=b = %d\n", a > b && a != b);
printf("a<b || a!=b = %d\n", a < b || a != b);
return 0;
}
a>b가 참이고 a!=b도 참입니다.
&& 연산자를 사용했기 때문에
결과는 참이 됩니다.
아래는
a<b는 거짓이지만 a!=b는 참이기 때문에
결과는 참이 됩니다.
조건 연산자
조건 ? 식1 : 식2
조건 연산자는 조건을 만족하면
식1이 실행되고
그렇지 않으면 식2가 샐행되도록 합니다.
나중에 배우게 될 조건문과 같은
역할을 합니다.
#include<stdio.h>
int main() {
int a = 10;
int b = 5;
int result;
result = a > b ? a : b;
printf("%d\n", result);
return 0;
}
조건은 a>b이고
이 조건이 참이면 result에
a가 저장되고
거짓이면
b가 저장됩니다.
대소비교후 값을 저장하는
연산 등으로 활용할 수 있습니다.
마무리
오늘은 연산자에 대해서 알아봤는데요.
다음 글에서는 비트 연산과
비트 연산자에 대해
알아보도록 하겠습니다!
'프로그래밍언어 > c언어' 카테고리의 다른 글
C언어 독학 #8. 자료형 (0) | 2020.07.18 |
---|---|
C언어 독학 #7. 비트 체계와 비트 연산자 (0) | 2020.07.17 |
C언어 독학 #5. 상수 변하지 않는 데이터 (2) | 2020.05.12 |
C언어 독학 #4. 변수 데이터를 저장하자 (6) | 2020.04.22 |
C언어 독학 #3. printf(), scanf() 데이터 출력과 입력 (4) | 2020.04.21 |