Language/C

📌 Chapter 04 - 변수와 자료형 - 변수의 사용

e-cko 2025. 5. 17. 17:04
반응형
반응형

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️ char1바이트 크기의 문자 또는 정수 데이터를 저장하는 자료형이다.
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형은 단순한 문자 저장 용도뿐만 아니라 정수처럼도 활용 가능하다는 점을 반드시 기억해야 한다.

반응형