(1) 연산자란 무엇인가
연산자란
말 그대로 연산을 위한 키워드들이다.
연산자에는 여러 종류가 있는데
1. 사칙 연산자
2. 관계 연산자
3. 논리 연산자
4. 비트 연산자
... 등이 있다..
연산자에는 연산 결과에 대한 '반환값'이란 게 있는데
처음 HelloWorld를 작성할 때 썼던 return 0; 그 반환과 같은 의미,,
(2) 사칙 연산자
사칙 연산자는 정말 우리가 아는 그 사칙 연산자가 맞다.
다만 곱셈 연산자와 나눗셈 연산자의 경우 모양이 살짝 다른데
교과서에 나오는 '\(\times\)' 와 '\(\div\)' 대신 * 와 / 를 쓴다.
float a = 10;
float b = 5;
printf("%.1f\n", a + b);//10 + 5
printf("%.1f\n", a - b);//10 - 5
printf("%.1f\n", a * b);//10 * 5
printf("%.1f\n", a / b);//10 / 5
위 코드를 실행하면
사칙 연산 결과가 '반환'되어, 위에서부터
15.0
5.0
50.0
2.0
이 출력될 것이다.
또한 나머지 연산도 수행할 수 있다
나머지 연산자는
% 이다
5 / 3은 몫이 1, 나머지가 2 !
(3) 관계 연산자
두 값을 비교하는 데 사용된다
초과, 미만, 이상, 이하, 일치, 불일치의 연산을 수행할 수 있다.
1. > - 왼쪽이 오른쪽 초과인가
2. < - 왼쪽이 오른쪽 미만인가
3. >= - 왼쪽이 오른쪽 이상인가
4. <= - 왼쪽이 오른쪽 이하인가
5. == - 왼쪽과 오른쪽이 같은가
6. != - 왼쪽과 오른쪽이 같지 않은가
이 연산자들은 제어문에서 거의 쓰이지만
아직 제어문을 공부하지 않은 상태에서는
%d로 출력함으로써 연산자들의 반환값을 확인할 수 있는데
이러한 관계 연산자는 Boolean 이라고 하는 참/거짓을 저장하는 1Byte 짜리 타입을 반환하게 된다.
C/C++에서는 참 true는 1, 거짓 false는 0으로 인식해서
관계 연산자의 반환값을 %d로 출력하면 0 또는 1로 출력된다.
int a = 1;
int b = 3;
printf("%d\n", a == b);//false
printf("%d\n", a != b);//true
printf("%d\n", a > b);//false
printf("%d\n", b<=3);//true
a와 b는 값이 불일치하므로 처음 두 줄은
0
1
이 출력이 되고
마지막 두 줄은
a는 b보다 작으므로 0 (false)
b는 3 이므로 '3보다 작거나 같다'에 성립하므로 1 (true)
가 나오게 된다.
대입 연산자인 = 와 관계 연산자인 == 을 헷갈리지 않게 주의해야 한다.
현실의 수학에서는 = 가 '같다'라는 의미로도 쓰이기 때문에
간혹 ==를 = 로 잘못 입력할 때가 있는데
이때 컴파일은 아주 정상적으로 된다.
왜냐하면 = 연산자도 대입된 값을 반환하기 때문에
문법적으로 오류가 나지 않기 때문이다.
하지만 0을 대입하지 않는 이상 무조건 true로 인식을 하기 때문에 코드가 의도한대로 작동하지 않으니 특별히 주의해야 한다.
(4) 논리 연산자
두 Boolean 값을 이용하여 최종 결과를 판단한다.
1. && - AND, 논리곱, 둘 다 참인가
2. || - OR, 논리합, 둘 중 하나라도 참인가
3. ! - NOT, 부정, 참이면 거짓, 거짓이면 참
int a = 0;
int b = 1;
printf("%d\n", a == 0 && b == 1); //a가 0이면서도 b가 1인가? true
printf("%d\n", a == 0 || b == 0); //a가 0이거나 b가 0인가? true
printf("%d\n", !(a==0));//a가 0인지의 여부의 반대, false
a != b
!(a == b)
는 완전히 동일한 결과를 가진다.
(5) 비트 연산자
자료형의 최소 단위는 Byte이지만 (sizeof(char)), 비트 연산자를 사용하면
비트 단위로도 연산을 수행할 수 있다.
때문에 특정 상황에서는 메모리를 절약할 수도 있다. (비트 플래그)
비트 연산자에 대해서는 다른 포스팅에서 자세히 얘기하고
끝..
'Programming > C & C++' 카테고리의 다른 글
[C/C++] 5.2강 - 시프트 연산자가 작동하는 방법 (0) | 2021.06.12 |
---|---|
[C/C++] 5.1강 - C의 다양한 연산자(사칙대입연산자,증감연산자,sizeof,비트연산자) (0) | 2021.06.12 |
[C/C++] 2.1강 - 변수 이름 규칙, 변수 이름 표기법 (카멜,파스칼,스네이크) (0) | 2021.06.09 |
[C/C++] 4강 - 자료형에 대하여··· (부동 소수점, ASCII, signed & unsigned) (0) | 2021.06.06 |
[C/C++] 3.1강 - scanf 사용 시 주의 사항!! (white-space 버그) (0) | 2021.06.06 |