2013-07-17 2 views
0

변수는 16 비트 여야합니다. 플랫폼에서 정확히 16 비트로 정의해야합니까?보장되는 변수의 크기는 어떻게 될 수 있습니까?

short으로 정의 할 수 있지만 플랫폼에 따라 16 비트 이상이 될 수 있습니다.

+1

당신은 int16_t'은 ([리스트]를 참조'사용할 수 있습니다 (http://en.cppreference.com/w/ c/types/integer))하지만 모든 컴파일러에서 정의되지는 않습니다. 어느 쪽을 사용하고 있습니까? –

+0

따라서 ''에 정의 된 형식 문자열 매크로'PRIu64','PRIu32','PRIu16'을 사용할 수 있습니다 : check [my answer] (http://stackoverflow.com/questions/17065203/a-funny-thing-with -sprintf/17065245 # 17065245) –

답변

6

당신이 C99을 사용하는 가정하면, 다음 <stdint.h>에서 uint16_t (또는 int16_t)를 사용합니다. 이들은 컴파일러가 기본 16 비트 유형을 사용할 수있는 한 존재하게됩니다.

1

부호있는 정수 또는 부호에 대한 uint16_t에 대한 사용 int16_t, 헤더 inttypes.hstdint.h는 C99에 도입된다. C89를 사용하는 경우 자신의 유형을 정의하십시오. §7.20 정수형 본원 구현이 제공하는 기술 유형별

) 선언한다 : 그들은 (201x 9899 ISO/IEC) C11에 따라, 특정 구현에 제공되지 않을 수

참고 해당 typedef 이름을 지정하고 연관된 매크로를 정의하십시오. 반대로 구현시 제공하지 않는 여기에 설명 된 각 유형에 대해 해당 typedef 이름을 선언하거나 관련 매크로를 정의하지 않아야합니다. 구현은 '필수'로 기술 된 유형을 제공해야하지만 다른 유형을 제공 할 필요는 없습니다 ('선택 사항'으로 설명).

0

부호없는 16 비트 정수를 사용하려면 uint16_t을 사용하고 부호있는 16 비트 정수는 int16_t을 사용하십시오.

inttypes.hstdint.h은 모두 C99에 도입됩니다. C89을 사용하는 경우 자신의 유형을 정의해야합니다.

+0

내 형식을 어떻게 정의해야합니까? – Alex

+0

@Alex 하나의 적절한 옵션은 비트 필드를 사용하여 16 비트 길이의 변수를 시뮬레이트하는 것입니다. –

0

<stdint.h>int16_t을 사용할 수없는 경우 해결 방법은 bitfield 일 수 있습니다. 비트 필드가 구조체 또는 노동 조합 내부에서만 유효하기 때문에, 하나에 포장되어야한다 :

#include <stdio.h> 

struct auw { 
    int sixteen :16; 
     }; 

int main(void) 
{ 

struct auw one = {16*1024 }, two, result; 

two = one; /* assigmment is easy*/ 

     /* but addition is a bit more painful */ 
result.sixteen = one.sixteen + two.sixteen -1; 

printf("Result=%d\n", (int) result.sixteen); 

return 0; 
} 
관련 문제