대입 연산자(=)
- 연산자(=) 뒤에 있는 값을, 연산자 앞의 변수에 대입
# include<stdio.h>
int main()
{
int num1 = 5;
printf("%d", num1);
}
산술 연산자
# include<stdio.h>
int main()
{
int num1 = 10;
int num2 = 2;
printf("%d + %d = %d\n", num1, num2, num1 + num2);
printf("%d - %d = %d\n", num1, num2, num1 - num2);
printf("%d * %d = %d\n", num1, num2, num1 * num2);
printf("%d / %d = %d\n", num1, num2, num1 / num2);
printf("%d % %d = %d\n", num1, num2, num1 % num2);
}
증감 연산자
- 값을 1 증가 또는 감소시키는 연산자
- 삽입된 위치에 따라 의미가 다름
# include<stdio.h>
int main()
{
int num1 = 5;
int num2 = 5;
printf("num1 : %d\n", num1);
printf("num1++ : %d\n", num1++);
printf("num1 : %d\n", num1);
printf("num2 : %d\n", num2);
printf("++num2 : %d\n", ++num2);
printf("num2 : %d\n", num2);
printf("num1 : %d\n", num1);
printf("num1-- : %d\n", num1--);
printf("num1 : %d\n", num1);
printf("num2 : %d\n", num2);
printf("--num2 : %d\n", --num2);
printf("num2 : %d\n", num2);
}
- 소괄호 등의 영향을 받지 않음
- 다음 문장으로 넘어가야 증감이 이루어짐
# include<stdio.h>
int main()
{
int num1 = 10;
int num2 = (num1--) + 2;
printf("num1 : %d\n", num1);
printf("num2 : %d\n", num2);
}
복합 대입 연산자
# include<stdio.h>
int main()
{
int num1 = 2, num2 = 4, num3 = 6;
num1 += 3;
num2 *= 4;
num3 %= 5;
printf("result : %d, %d, %d\n", num1, num2, num3);
}
관계 연산자
- 조건을 만족하면 1(True), 만족하지 않으면 0(False) 반환
- 조건을 만족하면 True(1), 만족하지 않으면 False(0) 반환
# include<stdio.h>
int main()
{
int num1 = 10;
int num2 = 12;
int result1, result2, result3;
result1 = (num1 == num2);
result2 = (num1 <= num2);
result3 = (num1 > num2);
printf("result1 : %d\n", result1);
printf("result2 : %d\n", result2);
printf("result3 : %d\n", result3);
}
논리 연산자
| 연산자 | 예시 | 기능 |
|---|
| && (논리곱) | A && B | A와 B모두 '참'이면 결과도 '참' |
| || (논리합) | A || B | A와 B둘 중 하나라도 '참'이면 결과도 '참' |
| ! (논리부정) | !A | A가 '참'이면 결과는 '거짓', A가 '거짓'이면 결과는 '참' |
# include<stdio.h>
int main()
{
int num1 = 10;
int num2 = 12;
int result1, result2, result3;
result1 = (num1==10 && num2==12);
result2 = (num1<12 || num2>12);
result3 = (!num1);
printf("result1 : %d\n", result1);
printf("result2 : %d\n", result2);
printf("result3 : %d\n", result3);
}
비트 연산자
| 연산자 | 예시 | 기능 |
|---|
| ~ (부정) | ~(11000011) | (00111100) |
| & (그리고) | (00001101) & (00000011) | (00000001), 같은 자리가 모두 1일 경우만 1 |
| | (또는) | (11001100) | (00110000) | (11111100), 같은 자리가 둘 중 1개라도 1이면 1 |
| ^ (배타적) | (11001111) ^ (00000011) | (11001100), 같은 자리가 서로 다르면 1, 같으면 0 |
| << (왼쪽 시프트) | (00001111) << 3 | (01111000), 왼쪽으로 숫자 이동하고 오른쪽에 새로 생기는건 0으로 채워짐, 10진수로 확인해보면 2의 배수가 됨 |
| >> (오른쪽 시프트) | (00001111) >> 3 | (00000001), 오른쪽으로 숫자 이동하고 왼쪽에 새로 생기는건 0으로 채워짐, 10진수로 확인해보면 2로 나눈 값이 됨 |
연산자 우선순위
1순위: ++, -- (증감 연산자)
2순위: !, ~ (부정 연산자)
3순위: *, /, %(사칙 연산에서 곱하기, 나누기)
4순위: +, -(사칙 연산에서 더하기, 빼기)
5순위: <<, >> (비트 연산의 시프트 연산)
6순위: <, <=, >, >= (비교 연산자, 크기 비교)
7순위: ==, != (비교 연산자, 같은지 비교)
8순위: 비트, 논리, 삼항 연산자
9순위: 삼항 연산자