Skip to main content
sizeof(a) == 4 byte

sizeof(‘a’) 크기가 4바이트 이유 in C언어

sizeof (‘a’)는 4바이트 sizeof(1.23456)은 8바이트입니다.

이해가 되나요?

Yes -> Back 버튼 눌러주세요.

No ->  포스팅 계속 읽으시면 됩니다.

#include <stdio.h>
 
main ()
{
  int su1 = 123;
  char ch = 'a';
  float su2 = 12.345;
 
  printf("변수 su1의 크기: %d byte\n", sizeof(su1));
  printf("문자형 자료형의 크기: %d byte\n", sizeof(char));
  printf("수식(su1+su2)의 크기: %d byte\n", sizeof(su1 + su2));
  printf("실수 1.23456 의 크기: %d byte\n", sizeof(1.23456));
  printf("문자형 상수 'a'의 크기: %d byte\n", sizeof('a'));
}

OUTPUT
변수 su1의 크기: 4 byte
문자형 자료형의 크기: 1 byte
수식(su1+su2)의 크기: 4 byte
실수 1.23456 의 크기: 8 byte
문자형 상수 ‘a’의 크기: 4 byte

기본적으로 자료형의 크기는 컴파일러/시스템마다 다릅니다. 컴파일러/시스템이 16비트였던 시절에는 int == 2바이트였으나 요새는 4바이트로 보셔도 무방합니다. (32비트, 64비트)

먼저 C언어 기본 자료형(Datatype)의 크기와 범위를 알아보겠습니다.

Data TypeMemory (bytes)RangeFormat Specifier
short int2-32,768 to 32,767%hd
unsigned short int20 to 65,535%hu
unsigned short int40 to 4,294,967,295%u
int4-2,147,483,648 to 2,147,483,647%d
long int4-2,147,483,648 to 2,147,483,647%ld
unsigned long int40 to 4,294,967,295%lu
long long int8-(2^63) to (2^63)-1%lld
unsigned long long int80 to 18,446,744,073,709,551,615%llu
signed char1-128 to 127%c
unsigned char10 to 255%c
float4
%f
double8
%lf
long double12
%Lf

sizeof(su1+su2)의 크기가 4바이트 이유?

su1 + su2의 값은 135.345001이고 int + float이므로 결과값은 float 데이터 타입입니다.

그러므로 sizeof의 값은 float 크기인 4바이트입니다.

sizeof(1.23456)의 크기가 8바이트 이유?

여기서 눈여겨 봐야 하는 것은 sizeof 안에 사용된 값입니다. 변수가 아닌 숫자 그대로입니다. 이러한 값을 숫자 리터럴(number literal)이라 하고 이러한 숫자 값들은 double로 취급됩니다.

만약 이 숫자 리터럴을 float로 취급하려면 1.23456f로 사용해야 합니다.

그러므로 sizeof의 값은 double 크기인 8바이트입니다.

sizeof(‘a’)의 크기가 4바이트 이유?

이곳에도 변수가 아닌 문자 그대로의 값이 사용되었습니다. 문자 리터럴이라고도 합니다. ‘a’라는 문자는 사람이 읽기 가능한 것이지 CPU가 해석할 수가 없습니다. CPU는 오직 바이너리 코드만 읽을 수 있기 때문입니다.

이러한 문자들을 관리하기 위해 C는 ASCII 테이블을 사용하고 각 문자에는 해당 int 값이 있습니다. a의 값은 97이고 바이너리로는 01100001 입니다.

그러므로 ‘a’의 sizeof 값은 int 크기인 4바이트입니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다