[완료] type별 size문제인데 이해가 가지 않습니다.
글쓴이: yundorri / 작성시간: 수, 2010/11/24 - 2:40오후
좀 더 쉽게 보시기 위해서 첨부를 올립니다.
179 /** 타입 별 크기를 알아보기 위한 코드 2007.02.13 ******************/ 180 long long test = 0xFFFFFFFF; 181 char test_char = (char)test; 182 short test_short = (short)test; 183 int test_int = (int)test; 184 long test_long = (long)test; 185 unsigned test_unsigned = (unsigned)test; 186 float test_float = (float)test; 187 double test_double = (double)test; 188 long long test_longlong = (long long)test; 189 unsigned char test_uchar = (unsigned char)test; 190 unsigned short test_ushort = (unsigned short)test; 191 unsigned long test_ulong = (unsigned long)test; 192 unsigned long long test_ulonglong = (unsigned long long)test; 193 194 printf( "char = %d Bytes (MAX %X)\n", sizeof(char), (char)test_char 195 printf( "short = %d Bytes (MAX %X)\n", sizeof(short), (short)test_short 196 printf( "int = %d Bytes (MAX %X)\n", sizeof(int), (int)test_int 197 printf( "long = %d Bytes (MAX %X)\n", sizeof(long), (long)test_long 198 printf( "unsigned = %d Bytes (MAX %X)\n", sizeof(unsigned), (unsigned)test_unsigned 199 printf( "float = %d Bytes (MAX %X)\n", sizeof(float), (float)test_float 200 printf( "double = %d Bytes (MAX %X)\n", sizeof(double), (double)test_double 201 printf( "long long = %d Bytes (MAX %X)\n", sizeof(long long), (long long)test_longlong 202 printf( "unsigned char (BYTE) = %d Bytes (MAX %X)\n", sizeof(unsigned char), (unsigned char)test_uchar 203 printf( "unsigned short (WORD) = %d Bytes (MAX %X)\n", sizeof(unsigned short), (unsigned short)test_ushort 204 printf( "unsigned long (DWORD) = %d Bytes (MAX %X)\n", sizeof(unsigned long), (unsigned long)test_ulong 205 printf( "unsigned long long (QWORD) = %d Bytes (MAX %X)\n", sizeof(unsigned long long),(unsigned long long)test_ulon 206 printf( "\n" ); 207 :!./examples char = 1 Bytes (MAX FFFFFFFF) short = 2 Bytes (MAX FFFFFFFF) int = 4 Bytes (MAX FFFFFFFF) long = 4 Bytes (MAX FFFFFFFF) unsigned = 4 Bytes (MAX FFFFFFFF) float = 4 Bytes (MAX 0) double = 8 Bytes (MAX FFE00000) long long = 8 Bytes (MAX FFFFFFFF) unsigned char (BYTE) = 1 Bytes (MAX FF) unsigned short (WORD) = 2 Bytes (MAX FFFF) unsigned long (DWORD) = 4 Bytes (MAX FFFFFFFF) unsigned long long (QWORD) = 8 Bytes (MAX FFFFFFFF)
왜 이렇게 나올까요?
제 생각대로라면 char는 F가, short는 FF가, int는 FFFF가 나와야 하는데요...
워낙 기초가 없다보니 이런 문제도 모르겠습니다. ㅠ_ㅠ
제 시스템은
Linux swdev2 2.6.22.14-72.fc6 #1 SMP Wed Nov 21 13:44:07 EST 2007 i686 i686 i386 GNU/Linux
입니다. 즐거운 하루 되십시요!!
File attachments:
첨부 | 파일 크기 |
---|---|
sizeof.jpg | 210.27 KB |
Forums:
음 ..
char, short 등을 unsigned 로 바꿔보세요.
char 변수에 0xFF 를 넣으면 값이 -1 이 됩니다.
%X 는 unsigned int 를 HEX 로 찍는 놈이니 입력값을 unsigned 로 판단할텐데..
-1 이 unsigned int 로 캐스팅 되면.. 0xFFFFFFFF 라는 값이 됩니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
답글 감사합니다. 근데 unsigned int도 결국
답글 감사합니다.
근데 unsigned int도 결국 4byte인데 0xFFFFFFFF (8byte)로
프린트를 할까요?
0xFFFFFFFF 는 정수로 보면 -1
0xFFFFFFFF 는 정수로 보면 -1 입니다.
이것을 char 로 바꾸면 0xFF(-1)겠고 이것을 %d형(int)으로 바꾸면 0xFFFFFFFF(-1)이겠죠
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
제가 조금 착각했군요.,
4byte가 0xFFFFFFFF 이죠?
그러면 8byte인 long long은
long long test = 0xFFFFFFFFFFFFFFFF;
이렇게 되어야 되는데 이게 컴파일이 안되네요.
g++ -o examples examples.cpp
examples.cpp:180: error: integer constant is too large for 'long' type
make: *** [all] 오류 1
(2 of 3): error: integer constant is too large for 'long' type
이건 어케 된걸까요?
그래서 코드를 수정했습니다.
그래도 결과는 같군요.
음 ..
일단 아래 글을 한번 살펴보신 후에, 다시 코드를 작성해 보심이 좋을 것 같습니다.
별도의 접미사가 없는 정수형 상수는 모두 int 로 취급됩니다.
그래서 0xFFFFFFFFFFFFFFFF 는 int 라기에는 너무 크다고 컴파일러가 경고해 주는 겁니다.
더불어 printf 의 man page 도 찬찬히 살펴보시고, format string 을 type 에 맞게 적절히 바꿔보세요.
http://ko.wikibooks.org/wiki/%EC%A0%95%EC%88%98%ED%98%95_%EB%8D%B0%EC%9D%B4%ED%84%B0
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
감사합니다. 해결했습니다.
^_____^
두 분 도움으로 궁금증이 해결되었습니다.
코드를 수정했구요, 출력 인자를 적절히 지정해야되는 것이었군요.
상수 지정시에도요.
결과는 이렇습니다.
코드는 이렇게 수정했구요.
댓글 달기