변수는 16 비트 여야합니다. 플랫폼에서 정확히 16 비트로 정의해야합니까?보장되는 변수의 크기는 어떻게 될 수 있습니까?
short
으로 정의 할 수 있지만 플랫폼에 따라 16 비트 이상이 될 수 있습니다.
변수는 16 비트 여야합니다. 플랫폼에서 정확히 16 비트로 정의해야합니까?보장되는 변수의 크기는 어떻게 될 수 있습니까?
short
으로 정의 할 수 있지만 플랫폼에 따라 16 비트 이상이 될 수 있습니다.
당신이 C99을 사용하는 가정하면, 다음 <stdint.h>
에서 uint16_t
(또는 int16_t
)를 사용합니다. 이들은 컴파일러가 기본 16 비트 유형을 사용할 수있는 한 존재하게됩니다.
부호있는 정수 또는 부호에 대한 uint16_t
에 대한 사용 int16_t
, 헤더 inttypes.h
및 stdint.h
는 C99에 도입된다. C89를 사용하는 경우 자신의 유형을 정의하십시오. §7.20 정수형 본원 구현이 제공하는 기술 유형별
) 선언한다 : 그들은 (201x 9899 ISO/IEC) C11에 따라, 특정 구현에 제공되지 않을 수
참고 해당 typedef 이름을 지정하고 연관된 매크로를 정의하십시오. 반대로 구현시 제공하지 않는 여기에 설명 된 각 유형에 대해 해당 typedef 이름을 선언하거나 관련 매크로를 정의하지 않아야합니다. 구현은 '필수'로 기술 된 유형을 제공해야하지만 다른 유형을 제공 할 필요는 없습니다 ('선택 사항'으로 설명).
부호없는 16 비트 정수를 사용하려면 uint16_t
을 사용하고 부호있는 16 비트 정수는 int16_t
을 사용하십시오.
inttypes.h
및 stdint.h
은 모두 C99
에 도입됩니다. C89
을 사용하는 경우 자신의 유형을 정의해야합니다.
내 형식을 어떻게 정의해야합니까? – Alex
@Alex 하나의 적절한 옵션은 비트 필드를 사용하여 16 비트 길이의 변수를 시뮬레이트하는 것입니다. –
<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;
}
당신은 int16_t'은 ([리스트]를 참조'사용할 수 있습니다 (http://en.cppreference.com/w/ c/types/integer))하지만 모든 컴파일러에서 정의되지는 않습니다. 어느 쪽을 사용하고 있습니까? –
따라서 ''에 정의 된 형식 문자열 매크로'PRIu64','PRIu32','PRIu16'을 사용할 수 있습니다 : check [my answer] (http://stackoverflow.com/questions/17065203/a-funny-thing-with -sprintf/17065245 # 17065245) –