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

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

아직도 sizeof가 이해가 안 가신다면 아래 내용을 참고하세요.

#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

C언어 자료형의 크기는 시스템(컴파일러)마다 다릅니다. 예로 가장 기본의 되는 int의 경우 시스템(컴파일러)이 16비트였던 시절에는 int의 크기는 2바이트였고 32비트(64피트)로 넘어오면서 4바이트가 되었습니다.

C언어 기본 자료형(Datatype)의 크기와 범위는 아래와 같습니다. 참고하세요.

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로 숫자에 f를 표기하여 넣으시면 됩니다.

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

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

문자(캐릭터)의 크기를 구하는 sizeof입니다. 'a'는 문자 리터럴이라고 합니다. ‘a’는 문자(캐릭터)이면서 숫자입니다. 내부적으로 바이너리 형식으로 저장되기 때문입니다. 이런 숫자들을 ASCII 테이블을 통해 각 문자로 해석할 수 있습니다. 결국 숫자 값의 크기를 구하고 있습니다. (예. a는 97이고 01100001입니다.)

#include <stdio.h>

int main(void) {
  printf("%c\n", 97);

  return 0;
}

OUTPUT
a

포맷 스트링 %c로 숫자를 출력하면 a가 출력됩니다. 그러므로 ‘a’의 sizeof 값은 int 크기인 4바이트입니다.

<< 다음 혼자 공부하는 C언어 이전 >>
반응형