3. 변수의 사용
1) 변수 선언과 초기화
1-1) 변수 선언
· 변수 선언 시 끝에 반드시 **세미콜론(;)**을 붙여야 한다.
· 변수는 적절한 자료형으로 선언해야 하며, 자료형이 유효 범위를 결정한다.
· 초기화를 하지 않으면 **쓰레기 값(Garbage Value)**이 들어갈 수 있다.
❗ 오타 주의: `doduble` → `double`
- 예: `int a;`, `double c, d;` 등으로 선언한다.
1-2) 변수 초기화
· 선언과 동시에 초깃값을 대입하는 과정을 변수의 초기화라 한다.
· 초기화를 하지 메모리는 다른 프로그램과 공유되기 때문에 초기화하지 않은 변수에는 예측 불가능한 값이 들어갈 수 있다.
· 따라서, 변수는 선언과 동시에 초기화하는 것이 좋다.
2) 정수형 자료형
- 정수형 자료형은 소수점이 없는 정수 데이터를 저장하기 위한 자료형이다.
- 변수 앞에 자료형을 선언하면, 해당 자료형에 맞는 메모리 공간 크기가 확보된다.
- 저장 가능한 범위는 자료형의 비트 수와 부호(Sign) 여부에 따라 달라진다.
2-1) 정수형 자료형의 종류와 크기
- 정수형 자료형은 short, int, long, long long으로 나뉜다.
- 각 자료형은 signed(부호 있음) 또는 **unsigned(부호 없음)**로 구분된다.
⭕ 주요 정수형 자료형:
| 자료형 | 크기 | 범위 (signed) | 범위 (unsigned) |
| short | 2byte (16bit) | -32,768 ~ 32,767 | 0 ~ 65,535 |
| int | 4byte (32bit) | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| long | 4byte (32bit) | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| long long | 8byte (64bit) | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 |
✅ 주의할 점
⚠️ 부호가 없는 unsigned형은 모두 양수만 저장할 수 있으므로, 양수 범위를 더 넓게 사용할 수 있다.
⚠️ signed형은 음수와 양수 모두를 저장할 수 있지만, 음수를 위해 절반의 범위를 양보한다.
2-2) 4byte 자료형의 표현
- 대표적으로 사용하는 int형은 4byte(32bit)를 사용한다.
- unsigned int를 사용하면 모든 비트를 양수로 활용할 수 있어, 더 큰 양의 정수를 저장할 수 있다.
⛏️ 예시로 살펴보면,
⭕ signed int는 -2,147,483,648 ~ 2,147,483,647
⭕ unsigned int는 0 ~ 4,294,967,295의 범위를 갖는다.
💻 예제 코드 - 정수형 자료형의 크기 출력
#include <stdio.h>
int main() {
printf("short: %lu byte\n", sizeof(short));
printf("unsigned short: %lu byte\n", sizeof(unsigned short));
printf("int: %lu byte\n", sizeof(int));
printf("unsigned int: %lu byte\n", sizeof(unsigned int));
printf("long: %lu byte\n", sizeof(long));
printf("unsigned long: %lu byte\n", sizeof(unsigned long));
printf("long long: %lu byte\n", sizeof(long long));
printf("unsigned long long: %lu byte\n", sizeof(unsigned long long));
return 0;
}
💻 예제 코드 2 - signed와 unsigned 비교
#include <stdio.h>
int main() {
signed int a = -100;
unsigned int b = 4294967196; // int 범위 초과 값
printf("signed int a = %d\n", a);
printf("unsigned int b = %u\n", b);
return 0;
}
✅ 마무리 정리
1️⃣ 정수형 자료형은 소수점 없는 값을 저장하며, 메모리 크기에 따라 범위가 다르다.
2️⃣ signed는 부호를 포함하며, unsigned는 양수만 표현할 수 있다.
3️⃣ int는 가장 널리 사용되며, 4byte(32bit)의 크기를 가진다.
4️⃣ sizeof 연산자를 통해 자료형의 크기를 확인할 수 있다.
5️⃣ 부호에 따라 동일한 크기의 자료형이라도 저장 범위가 달라지므로 주의가 필요하다.
3) 실수형 자료형
- 실수형 자료형은 소수점이 포함된 데이터를 저장하기 위한 자료형이다.
- 부동 소수점(Floating-point) 방식으로 표현되며, 소수점 위치를 고정하지 않고 값과 지수를 따로 저장한다.
- 수학 계산, 과학기술 연산 등 정밀도가 요구되는 상황에서 많이 사용한다.
3-1) 실수형 자료형의 종류 및 범위
| 자료형 | 크기 | 범위 | 정밀도 |
| float | 4byte (32bit) | 약 1.2E-38 ~ 3.4E38 | 소수점 6~7자리 |
| double | 8byte (64bit) | 약 2.2E-308 ~ 1.8E308 | 소수점 15~16자리 |
| long double | 8byte (64bit) | (PC에선 double과 같음) | 동일 |
⚠️ PC 환경에서는 double과 long double이 동일하게 동작하는 경우가 많다.
3-2) float 자료형
- float형은 소수점 6자리까지 유효하다.
- 7번째 자리부터는 자동 반올림되어 출력된다.
- 출력 시 %f 서식 지정자를 사용한다.
💻 예제 코드 - BMI 계산
#include <stdio.h>
int main() {
float height = 1.75; // 단위: meter
float weight = 68.0; // 단위: kg
float bmi = weight / (height * height);
printf("BMI = %.2f\n", bmi); // 소수점 둘째 자리까지 출력
return 0;
}
3-3) double 자료형
- double형은 소수점 15자리까지 정확히 표현할 수 있다.
- 16자리까지 유효, 17번째 자리에서 반올림된다.
- 정밀한 연산이 필요한 상황에서 사용한다.
💻 예제 코드 - 삼각형 넓이 계산
#include <stdio.h>
int main() {
double base = 10.25;
double height = 7.80;
double area = (base * height) / 2;
printf("삼각형의 넓이 = %.4lf\n", area); // 소수점 넷째 자리까지 출력
return 0;
}
4) 캐스트 연산자 (형변환 연산자)
- 캐스트 연산자는 자료형을 명시적으로 변환할 때 사용한다.
- 정수형 데이터를 실수형으로 바꿀 때 자주 사용된다.
- 자동 형변환은 컴파일러가 판단하여 이루어지며, 강제 형변환은 개발자가 직접 자료형을 지정한다.
✅ 형식: (자료형) 변수명
⚠️ 정수끼리 나누면 정수 결과만 출력되므로, 실수 결과를 원할 경우 캐스트 연산자를 반드시 사용해야 한다.
💻 예제 코드 - 캐스트 형변환
#include <stdio.h>
int main() {
int a = 7;
int b = 2;
float result1 = a / b; // 정수 나눗셈: 3
float result2 = (float)a / b; // 형변환된 실수 나눗셈: 3.5
printf("정수 나눗셈 결과: %f\n", result1);
printf("실수 나눗셈 결과: %f\n", result2);
return 0;
}
✅ 마무리 정리
1️⃣ float는 소수점 6자리까지 유효하고, double은 15자리까지 정밀하다.
2️⃣ 실수 계산이 필요한 경우에는 float보다 double을 사용한다.
3️⃣ %f는 float, %lf는 double 출력을 위한 서식 지정자이다.
4️⃣ 정수끼리 나눌 경우 실수로 결과를 얻고 싶다면 캐스트 연산자를 사용해야 한다.
5️⃣ (자료형) 변수명 형태로 형변환을 지정한다.
4) 문자형 변수란
- 문자형 변수(char)는 알파벳 문자 하나를 저장할 때 사용한다.
- 문자 하나는 1바이트 크기를 차지하며, 모든 문자는 아스키 코드(ASCII code)로 표현된다.
- 예를 들어, 'A'는 아스키 코드 65에 해당하며, 메모리에는 10진수 65가 저장된다.
4-1) char 자료형의 세부 종류
signed char
· char는 내부적으로 정수형으로 처리된다.
· 일반적으로 signed char로 취급된다.
· 저장 범위는 -128 ~ 127이다. (2의 보수 표현 기준)
unsigned char
· 부호가 없는 unsigned char는 0 ~ 255 범위의 값을 저장할 수 있다.
· 정수 데이터의 바이트 단위 처리에 자주 사용된다.
✳️ char형 변수는 문자 데이터 뿐만 아니라 1바이트 정수 데이터를 처리할 수도 있다.
4-2) 문자 입력과 출력 시 주의할 점
문자와 문자열의 차이
· 문자 하나는 'A'처럼 **작은 따옴표(' ')**로 감싼다.
· 문자열은 "ABC"처럼 **큰 따옴표(" ")**로 감싼다.
⚠️ 작은 따옴표를 써야 char 변수에 문자 하나를 올바르게 저장할 수 있다.
출력 형식 지정자
· 문자형 변수는 내부적으로 정수이므로 출력 형식에 따라 다르게 출력된다.
⭕ 예시
1️⃣ %c → 문자 자체 출력
2️⃣ %d → 10진수 아스키 코드 값 출력
3️⃣ %o → 8진수 출력
4️⃣ %x → 16진수 출력
4-3) 문자와 정수 연산 가능
- 모든 문자는 아스키 코드 값으로 매핑되어 있으므로, 정수와 산술 연산이 가능하다.
✅ 예를 들어, 'A' + 1의 결과는 'B'가 된다.
✅ 마무리 정리
1️⃣ char형은 1바이트 크기의 문자 또는 정수 데이터를 저장하는 자료형이다.
2️⃣ 문자 하나는 **작은 따옴표(' ')**로 감싸서 사용한다.
3️⃣ 출력할 때 %c는 문자, %d는 정수 아스키 코드 값을 출력한다.
4️⃣ 문자형 변수는 정수형처럼 산술 연산이 가능하다.
5️⃣ signed char는 -128 ~ 127, unsigned char는 0 ~ 255 범위를 가진다.
💻 예제 코드
#include <stdio.h>
int main() {
char alphabet = 'A'; // 문자 'A' 저장
printf("문자 출력: %c\n", alphabet); // 문자로 출력
printf("아스키 코드(10진수): %d\n", alphabet); // 아스키 코드 65 출력
printf("아스키 코드(8진수): %o\n", alphabet); // 아스키 코드 8진수 출력
printf("아스키 코드(16진수): %x\n", alphabet); // 아스키 코드 16진수 출력
// 문자형 변수에 정수 연산 적용
printf("다음 문자: %c\n", alphabet + 1); // 'B' 출력
printf("다음 문자의 아스키 코드: %d\n", alphabet + 1); // 66 출력
return 0;
}
📝 위 예제는 문자형 변수의 다양한 출력 방식과 아스키 코드 연산 가능성을 보여주는 대표적인 예이다.
이처럼 char형은 단순한 문자 저장 용도뿐만 아니라 정수처럼도 활용 가능하다는 점을 반드시 기억해야 한다.
'Language > C' 카테고리의 다른 글
| 📌 Chapter 04 - 변수와 자료형 - 자료형변환 (0) | 2025.05.17 |
|---|---|
| 📌 Chapter 04 - 변수와 자료형 - 상수 (0) | 2025.05.17 |
| 📌 Chapter 04 - 변수와 자료형 - 자료형 (0) | 2025.05.17 |
| 📌 Chapter 04 - 변수와 자료형 - 변수의 기초 (0) | 2025.05.17 |
| 📌 Chapter 03 - 표준 입출력 함수 - 문자 코드 (0) | 2025.05.16 |