' [C/C++] 5강 - C의 다양한 연산자(사칙연산자,관계연산자,논리연산자)

Programming/C & C++

[C/C++] 5강 - C의 다양한 연산자(사칙연산자,관계연산자,논리연산자)

mdisprgm 2021. 6. 9. 21:21
728x90
728x90

(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)), 비트 연산자를 사용하면

 

비트 단위로도 연산을 수행할 수 있다.

 

때문에 특정 상황에서는 메모리를 절약할 수도 있다. (비트 플래그)

 

비트 연산자에 대해서는 다른 포스팅에서 자세히 얘기하고

 

 

 

끝..

728x90
728x90
'