- 데이터의 모든 표현의 근본은 비트(0과 1)의 패턴이다.
- 메모리에 저장된 값은 물리적으로 0과 1로 존재한다.
- 인간이 이 메모리에 저장된 값을 볼때 주로 16진수(Hex) 값으로 본다. 16진수한 자리가 4비트로 1:1 대응하기 때문에 읽기쉬움
- 비트값들을 어떻게 해석할 것인가에 따라 타입이 생긴다.
int -> 4바이트를 정수로 해석. float -> 4바이트를 실수로 해석. char -> 1바이트를 문자로 해석.
- 똑같은 바이트라도 어떻게 해석하느냐에 따라 의미가 달라진다.
#include <stdio.h>
int main()
{
unsigned char mem[4];
mem[0] = 0xDB;
mem[1] = 0x0F;
mem[2] = 0x49;
mem[3] = 0x40;
void *ptr = mem;
int *as_int = (int *)ptr;
float *as_float = (float *)ptr;
unsigned char *as_bytes = (unsigned char *)ptr;
char *as_char = (char *)ptr;
printf("정수로 해석: %d\n", *as_int);
printf("실수로 해석: %f\n", *as_float);
printf("바이트로 해석: %02X %02X %02X %02X\n",
as_bytes[0], as_bytes[1], as_bytes[2], as_bytes[3]);
printf("문자로 해석: %c\n", as_char[3]);
return 0;
}
정수로 해석: 1078530011
실수로 해석: 3.141593
바이트로 해석: DB 0F 49 40
문자로 해석: @
- 메모리는 타입을 가지지 않는다. 타입을 가지는 것은 프로그램이다.