c/c++ 표준 int 타입

14
C/C++ 표표 int 표표 2015/07 류류류

Upload: changwoo-ryu

Post on 10-Feb-2017

471 views

Category:

Software


3 download

TRANSCRIPT

Page 1: C/c++ 표준 int 타입

C/C++ 표준 int 타입2015/07 류창우

Page 2: C/c++ 표준 int 타입

C 명세의정수타입기준은느슨함

char - 최소 8 비트인최소주소단위unsigned 일수도있음 (e.g. ARM)

short - 최소 16비트int - 최소 16비트 , 가장빠른타입long - 최소 32비트char <= short <= int <= long

Page 3: C/c++ 표준 int 타입

비트크기가고정된타입의필요성

파일포맷 네트워크프로토콜 하드웨어레지스터

Page 4: C/c++ 표준 int 타입

옛날에는 ...typedef unsigned long DWORD; /* 32 bits*/typedef unsigned short WORD; /* 16 bits */typedef unsigned char BYTE; /* 8 bits */...

Page 5: C/c++ 표준 int 타입

라이브러리 / 프레임워크마다다르다

<windows.h> DWORDword 가 2 바이트였던 16 비트시절잔재

MFC uint32glib guint32Qt quint32

Page 6: C/c++ 표준 int 타입

플랫폼마다다르게정의해야

IA32sizeof(int) == 4sizeof(long) == 4sizeof(void*) == 4

IA64sizeof(int) == 4sizeof(long) == 8sizeof(void*) == 8

Page 7: C/c++ 표준 int 타입

printf()format descriptor …도환경에따라달라짐

#ifdef __x86_64__printf(“=> %u\n”, u32); /* unsigned int */#elseprintf(“=> %lu\n”, u32); /* unsigned long */#endif

Page 8: C/c++ 표준 int 타입

pointer => intint 가포인터를저장한다는보장을못함 .

void* ptr = blahblah();int data = (int) ptr; /* IA64 bug: 64b => 32b */send(data);

Page 9: C/c++ 표준 int 타입

그래서 , 표준을씁시다

int8_t, uint8_t, int16_t, uint16_tint32_t, uint32_t, int64_t, uint64_t

Page 10: C/c++ 표준 int 타입

새로운 (?) 표준C99 #include <stdint.h>C++11 #include <cstdint>

충분히널리쓰이는표준 => 레가시아웃 ! 이제항상이걸쓰면된다 !

Page 11: C/c++ 표준 int 타입

엄밀히말하자면 ..int32_t (optional)- 하지만사실상필수

int_fast32_t ( 최소 32 비트인가장빠른타입 )- 작은타입이오히려느릴수도있으므로

int_least32_t ( 최소 32 비트인최소타입 )- 작은타입을지원하지않을수도있으므로

( 하지만사실상없음 )

Page 12: C/c++ 표준 int 타입

printf() 에서사용

#include <inttypes.h>

/* PRI<conversion><bits> */printf(“=> ” PRIu32 “\n”, u32);

Page 13: C/c++ 표준 int 타입

pointer => intptr_tintptr_t ( 포인터를저장할만한크기의 int)- 이것도 optional 이지만사실상필수

void* ptr = get_pointer();intptr_t data = (intptr_t) ptr;send(data);

Page 14: C/c++ 표준 int 타입

보너스 : C bool 표준타입

C99:#include <stdbool.h>bool flag;flag = false;flag = true;