[연산을 위한 연산자와 값의 저장을 위한 변수]
★ 덧셈을 위한 (+) 연산자(operator)
- int : 정수의 저장이 가능한 메모리 공간 할당
- num_1, num_2 : 그 메모리 공간의 이름을 num_1, num_2 라고 함.
// 덧셈 (+)
#include <stdio.h>
int main() {
int num_1 = 3; //num_1, num_2라는 이름의 변수선언
int num_2 = 4;
printf("두 수의 합 = %d\n", num_1 + num_2);
return 0;
}
★ 변수의 다양한 선언 및 초기화 방법
- 초기화 : 선언된 변수에 처음 값을 저장하는 것
- 초기화 이후에 저장된 값을 변경할 때에는 '대입' 또는 '대입연산'이라고 함.
- 변수 선언만 하고 초기화를 하지 않으면, 쓰레깃값이 들어가 있음.
- 따라서, 선언 후 초기화를 해줘야 함!!
// 변수 선언 및 초기화
#include <stdio.h>
int main() {
int num_1, num_2; // 변수 num_1, num_2 선언
int num_3 = 30, num_4 = 40; // 변수 num_3, num_4 선언 및 초기화
printf("num_1 : %d, num_2 : %d\n", num_1, num_2);
num_1 = 10; // num_1 초기화
num_2 = 20; // num_2 초기화
printf("num_1 : %d, num_2 : %d\n", num_1, num_2);
printf("num_3 : %d, num_4 : %d\n", num_3, num_4);
return 0:
}
[C언어의 다양한 연산자 소개]
★ 대입 연산자(=)와 산술 연산자(+, -, *, /, %)
연산자 | 기능 | 결합방향 |
= | 연산자 기준 오른쪽 값을 왼쪽 변수에 대입 | ← |
+ | 두 값 더함 | → |
- | 왼쪽에서 오른쪽 뺌 | → |
* | 곱 | → |
/ | 왼쪽을 오른쪽으로 나눔 | → |
% | 왼쪽을 오른쪽으로 나눴을 때의 나머지 반환 | → |
[Talbe. 1] 대입 연산자와 산술 연산자
// 대입 연산자와 산술 연산자
#include <stdio.h>
int main() {
int num_1 = 10, num_2 = 3;
printf("%d + % d = %d\n", num_1, num_2, num_1+num_2);
printf("%d - % d = %d\n", num_1, num_2, num_1-num_2);
printf("%d x % d = %d\n", num_1, num_2, num_1*num_2);
printf("%d ÷ % d 의 몫 = %d\n", num_1, num_2, num_1/num_2);
printf("%d ÷ % d 의 나머지 = %d\n", num_1, num_2, num_1%num_2);
return 0:
}
★ 복합 대입 연산자
- Python 복합 대입 연산자랑 똑같이 씀
- a = a + b ☞ a += b
- a = a - b ☞ a -= b
- a = a * b ☞ a *= b
- a = a / b ☞ a /= b
- a = a % b ☞ a %= b
// 복합 대입 연산자
#include <stdio.h>
int main() {
int num_1 = 2, num_2 = 4, num_3 = 10;
num_1 += 3; // num_1 = num_1 + 3
num_2 *= 5; // num_2 = num_2 * 5
num_3 %= 7; // num_3 = num_3 % 7
printf("num_1 : %d\nnum_2 : %d\nnum_3 : %d\n", num_1, num_2, num_3);
return 0;
}
★ 증가, 감소 연산자
- 이 부분은 python이랑은 다름!!!!!
- Python에서는 num을 1씩 증가시키기 위해서 n += 1 의 형태로 사용했음.
- C에서는 n++ 라고 쓰면 됨!!!
- 헷갈리니까 연산자가 앞에 있으면 연산자 먼저라고 생각하면 될듯??
연산자 | 기능 | 결합방향 |
++num | num 값을 1 증가시키고, 속한 문장의 나머지 진행 (선 증가, 후 연산) |
← |
num++ | 속한 문장을 진행하고, num 값을 1 증가시킴 (선 연산, 후 증가) |
→ |
--num | num 값을 1 감소시키고, 속한 문장의 나머지 진행 (선 감소, 후 연산) |
← |
num-- | 속한 문장을 진행하고, num 값을 1 감소시킴 (선 연산, 후 감소) |
→ |
[Table. 2] 증가, 감소 연산자
- num_1++ 는 선 연산, 후 증가이기 때문에, num_1++는 그대로 20이고, 이후에는 21로 바뀜.
- ++num_2는 선 증가, 후 연산이기 때문에, ++num_2는 21로 바뀜.
// 증가, 감소 연산자
#include <stdio.h>
int main() {
int num_1 = 20;
int num_2 = 20;
printf("num_1 : %d\n", num_1);
printf("num_1++ : %d\n", num_1++); // 선 연산, 후 증가
printf("num_1 : %d\n\n", num_1);
printf("num_2 : %d\n", num_2);
printf("++num_2 : %d\n", ++num_2); // 선 증가, 후 연산
printf("num2 : %d\n", num_2);
return 0;
}
- 또 다른 예제를 살표보면, 더 이해가 쉬울 수 있음.
- num_1은 10이고, num_2는 먼저 num_1과 2를 더한 후, 다음 연산에서 1이 감소함.
- 즉, 다음 문장으로 넘가야 1이 감소함!!
- 따라서, num_2를 출력해보면 10 + 2 = 12 임.
#include <stdio.h>
int main() {
int num_1 = 10;
int num_2 = (num_1--) + 2;
printf("num_1 : %d\n", num_1);
printf("num_2 : %d\n", num_2);
return 0;
}
★ 관계 연산자 (<, >, ==, !=, <=, >=)
- 대소와 동등의 관계를 따지는 연산자
- 두 개의 값을 비교하기 때문에, 비교 연산자라고도 불림.
- 쓰이는 건 python이랑 똑같음.
- Python에서는 bool 자용형이 있어서 관계 연산자의 결과가 True/False로 나왔는데, C언어는 bool 자료형이 따로 없고 0과 1로 표현됨. 0은 False고, 1은 True임.
연산자 | 기능 | 결합방향 |
> | 연산자 기준 왼쪽이 크냐 | → |
< | 연산자 기준 왼쪽이 작냐 | → |
== | 연산자 기준 왼쪽과 오른쪽이 같냐 | → |
!= | 연산자 기준 왼쪽과 오른쪽이 다르냐 | → |
<= | 연산자 기준 왼쪽이 작거나 같냐 | → |
>= | 연산자 기준 왼쪽이 크거나 같냐 | → |
[Table. 3] 관계 연산자
// 관계 연산자
#include <stdio.h>
int main() {
int num_1 = 10;
int num_2 = 12;
int result_1, result_2, result_3;
result_1 = (num_1 == num_2);
result_2 = (num_1 <= num_2);
result_3 = (num_1 > num_2);
printf("result_1 : %d\n", result_1);
printf("result_2 : %d\n", result_2);
printf("result_3 : %d\n", result_3);
return 0;
}
★ 논리 연산자 (&&, ||, !)
- and, or, not 을 표현하는 연산자
- Python에서는 and, or, not으로 썼는데, C는 &&, ||, ! 로 씀!!!!
- 쓰이는 방법은 python과 동일함.
연산자 | 기능 | 결합방향 |
&& | 연산자 기준 양쪽이 참이면 '참' 반환 | → |
|| | 연산자 기준 왼쪽, 오른쪽 둘 중 하나라도 참이면 '참' 반환 | → |
! | ex) !A A가 참이면 '거짓', 거짓이면 '참' 반환 |
← |
[Table. 4] 논리 연산자
// 논리 연산자
#include <stdio.h>
int main() {
int num_1 = 10;
int num_2 = 12;
int num_3 = 0;
int result_1, result_2, result_3, result_4, result_5, result_6;
result_1 = (num_1 == 10 && num_2 == 12); // 참
result_2 = (num_1 == 100 && num_2 == 120); // 거짓
result_3 = (num_1 == 10 || num_2 == 120); // 참
result_4 = (num_1 == 100 || num_2 == 120); // 거짓
result_5 = (!num_1); // !참 = 거짓
result_6 = (!num_3); // !거짓 = 참
printf("result_1 : %d\n", result_1);
printf("result_2 : %d\n", result_2);
printf("result_3 : %d\n", result_3);
printf("result_4 : %d\n", result_4);
printf("result_5 : %d\n", result_5);
printf("result_6 : %d\n", result_6);
return 0;
}
★ 콤마 연산자 ( , )
- 둘 이상의 변수를 동시에 선언하거나, 둘 이상의 문장을 한 행에 삽입하는 경우에 사용됨.
// 콤마 연산자
#include <stdio.h>
int main() {
int num_1 = 1, num_2 = 2;
printf("Hello! "), printf("I'm "), printf("Polibo! \n");
num_1++, num_2++;
printf("num_1 : %d, ", num_1), printf("num_2 : %d", num_2), printf("\n");
return 0;
}
★ 연산자의 우선순위와 결합방향
- 우선 순위 : 수학에서 곱하기를 더하기보다 먼저 하는 것과 같은 우선 순위
- 결합 방향 : 우선순위가 동일한 두 연산자가 하나의 수식에 존재하는 경우, 어떤 순서대로 연산하느냐를 결정
순위 | 연산기호 | 연산자 | 결합방향 |
1위 | () | 함수호출 | → |
[] | 인덱스 | ||
-> | 간접지정 | ||
. | 직접지정 | ||
num++ num-- |
후위증가 및 감소 | ||
2위 | ++num --num |
전위증가 및 감소 | ← |
sizeof | 바이트 단위 크기 계산 | ||
~ | 비트 단위 NOT | ||
! | 논리 NOT | ||
-, + | 부호 연산 (음수, 양수 표현) | ||
& | 주소 연산 | ||
* | 간접지정 연산 | ||
3위 | (casting) | 자료형 변환 | ← |
4위 | *, /, % | 곱셈, 나눗셈 관련 연산 | → |
5위 | +, - | 덧셈, 뺄셈 | → |
6위 | <<, >> | 비트이동 | → |
7위 | <, >, <=, >= | 대소비교 | → |
8위 | ==, != | 동등비교 | → |
9위 | & | 비트 AND | → |
10위 | ^ | 비트 XOR | → |
11위 | | | 비트 OR | → |
12위 | && | 논리 AND | → |
13위 | || | 논리 OR | → |
14위 | ? : | 조건연산 | → |
15위 | =, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |= | 대입연산 | ← |
16위 | , | 콤마연산 | → |
[Table. 5] 연잔자의 우선순위와 결합방향
'C > 예습' 카테고리의 다른 글
[2025.03.09] (예습) 조건에 따른 흐름의 분기 (1) | 2025.03.09 |
---|---|
[2025.03.09] (예습) for문_연습문제 (2) | 2025.03.09 |
[2025.03.08] (예습) while문_연습문제 (2) | 2025.03.08 |
[2025.03.08] (예습) 반복실행을 명령하는 반복문 (0) | 2025.03.08 |
[2025.03.08] (예습) scanf 연습문제 풀이 (0) | 2025.03.08 |