Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 정수와 문자 값이 메모리에 저장되는 방식

C 프로그래밍에서는 정수(int)와 문자(char) 변수를 프로그램 곳곳에서 매우 자주 사용합니다. 그렇다면 이 값들은 실제로 메모리에 어떤 형태로 저장될까요? 이번 글에서는 그 내부 동작 원리를 예제와 함께 자세히 살펴보겠습니다.

문자 값도 결국 정수다

C 언어에서 문자(char) 값은 내부적으로 정수 형태로 저장됩니다. char 타입은 1바이트(8비트) 크기를 가지므로, 저장하려는 값이 이 범위를 벗어나면 상위 비트가 잘려나가고 의도와 다른 값이 저장될 수 있습니다.

char 변수에 270 대입하기

다음 코드처럼 char 타입 변수에 270을 대입해 보겠습니다. 270의 이진수 표현은 100001110(9비트)입니다. 하지만 char는 8비트만 저장할 수 있으므로, 오른쪽(하위) 8비트만 취하게 됩니다. 그 결과 00001110, 즉 10진수 14가 변수에 저장됩니다. 이 과정에서 컴파일러는 값이 범위를 초과했다는 오버플로우(overflow) 경고를 발생시킵니다.

char 변수에 -130 대입하기

음수는 2의 보수(two's complement) 방식으로 저장됩니다. 예를 들어 -130을 저장하는 경우를 생각해 봅시다. 먼저 130의 이진수는 10000010입니다. 이 값의 2의 보수를 구하면 다음과 같습니다.

01111101 + 1 = 01111110

여기서도 마찬가지로 오른쪽 8비트만 취하므로, 최종적으로 01111110, 즉 126이 저장됩니다.

예제 코드

#include <stdio.h>
int main() {
    char x = 270;
    char y = -130;
    printf("The value of x is: %d\n", x);
    printf("The value of y is: %d", y);
}

실행 결과

The value of x is: 14
The value of y is: 126

정리

- char 타입은 내부적으로 8비트 크기의 정수로 처리됩니다.
- 저장 가능한 범위를 초과하는 값을 대입하면 상위 비트가 잘리고, 컴파일러는 경고를 출력합니다.
- 음수는 2의 보수 형태로 변환된 후 저장됩니다.
- 따라서 char 변수에는 반복문 카운터나 작은 범위의 숫자 등 제한적인 용도로 사용하는 것이 안전합니다.