- 산술 연산자
- 대입 연산자
- 비트 연산자
- 연산자 우선순위
- Q&A
- 마치며
연산자 | 의미 |
---|---|
+ | 양변의 값을 더하기 |
- | 양변의 값을 빼기 |
* | 양변의 값을 곱하기 |
/ | 좌변의 값을 우변의 값으로 나누기 |
% | 좌변의 값을 우변의 값으로 나눈 나머지 |
단, 주의할 점이 있습니다.
C는 서로 다른 타입의 연산을 진행하면,
숫자의 범위가 더 큰 자료형으로 자료형들이 바뀌는 산술 연산을 수행합니다.
#include <stdio.h>
int main(void) {
int a = 10;
double b = 3;
printf("%d\n%f", a / b, a / b);
return 0;
}
[Result]
-1431655765
3.333333
위의 예시에서는
정수형 변수 a
와 double형 변수 b
를 나눗셈으로 연산했는데요,
숫자의 범위가 더 큰 double형으로 산술 연산을 하게 되어서
출력을 할 때 실수형으로 해주어야 오류가 나지 않습니다.
대입 연산자는 다음과 같은 경우에 사용할 수 있습니다.
- 변수를 선언할 때
- 연산 결과를 변수에 저장할 때
- 함수 변환값을 변수에 저장할 때
연산자 | 의미 |
---|---|
= | 대입(할당) |
+= | 좌변의 변수에서 우변의 값을 더해서 좌변의 변수에 대입 |
-= | 좌변의 변수에서 우변의 값을 빼서 좌변의 변수에 대입 |
*= | 좌변의 변수에서 우변의 값을 곱해서 좌변의 변수에 대입 |
/= | 좌변의 변수에서 우변의 값으로 나누어 좌변의 변수에 대입 |
%= | 좌변의 변수에서 우변의 값으로 나눈 나머지를 좌변의 변수에 대입 |
연산자 | 의미 |
---|---|
a++ | 전위형(prefix), 변수 a에 1을 더한 후 결과 반환 |
++a | 후위형(prostfix), 변수 a를 반환 후 1을 더함 |
a-- | 전위형(prefix), 변수 a에 1을 뺀 후 결과 반환 |
--a | 후위형(prostfix), 변수 a를 반환 후 1을 뺌 |
#include <stdio.h>
int main(void) {
int a = 1;
int b = 1;
int c = 1;
int d = 1;
printf("%d\n", a++); //prefix
printf("%d\n", ++b); //postfix
printf("%d\n", c--); //prefix
printf("%d", --d); //postfix
return 0;
}
[Result]
1
2
1
0
전위형(Prefix)는 먼저 연산을 수행한 후 변수의 값을 반환하고,
후위형은(Postfix)는 변수의 값을 먼저 반환한 후 연산을 수행합니다.
- 비트 연산자
코드를 작성하면서, 비트 단위의 연산이 필요할 경우 사용
연산자 | 의미 | 예시 |
---|---|---|
& | 양변의 비트 값 모두 1일 경우에만 1을 반환 | x, y = 1,0 x & y # 0 |
| | 양변의 값 모두 0일 경우에만 0을 반환 | x, y = 1,0 x | y # 1 |
^ | 양변의 값이 다를 경우 1, 같을 경우 0을 반환 | x, y = 1,0 x ^ y # 1 |
~ | 비트 값이 1일 경우 0, 0일 경우 1을 반환 | x = 1 ~ x # -2 |
<< | 좌변의 값을 우변의 값만큼 비트를 왼쪽으로 이동 | x = 4 x << 1 # 8 |
>> | 좌변의 값을 우변의 값만큼 비트를 오른쪽으로 이동 | x = 4 x << 1 # 2 |
코드를 작성하다보면 여러가지 연산자를 사용하게 됩니다.
이 때 연산자의 연산 순서 때문에, 의도하지 않은 논리적 오류가 발생할 수 있습니다.
따라서 미리 정의된 연산자의 우선순위를 알아야 합니다.
우선 순위 | 연산자 | 좌우 우선 순위 |
---|---|---|
1 | ( ), [], ->, ++(post), --(post) | 왼쪽 우선 |
2 | !, ~, +-(부호), *(포인터), &, sizeof, ++(pre), --(pre) | 오른쪽 우선 |
3 | *, /, % | 왼쪽 우선 |
4 | +, - | 왼쪽 우선 |
5 | << >> | 왼쪽 우선 |
6 | <, <=, >, >= | 왼쪽 우선 |
7 | == , != | 왼쪽 우선 |
8 | & | 왼쪽 우선 |
9 | ^ | 왼쪽 우선 |
10 | | | 왼쪽 우선 |
11 | && | 왼쪽 우선 |
12 | || | 왼쪽 우선 |
13 | ?, : | 오른쪽 우선 |
14 | = | 오른쪽 우선 |
15 | , | 왼쪽 우선 |
보수와 관련된 내용은 전에 Python에서 배우다가 정리해본 보수를 참고하자!
오늘도 모두의 코드에서 공부하면서 배운 내용을 정리해보았습니다.
제가 이해하기 편하도록 정리하면서 글을 작성하다보니까 다시 한번씩 되뇌이는 습관이 생기네요.
좋은 습관이었으면 하네요.
사실 공부를 한 일주일만에 하는데요,
너무 귀찮아서 나약해져버렸어요😢
다시 열심히 하겠습니다...
[Reference] : 위 글은 다음 내용을 참고, 인용하여 만들어졌습니다.