2011-01-09 3 views
3

<stdint.h>에 선언 된 int16_t 유형의 서명이 인 경우에 서명해야합니다. 나는 그것이 서명되어야한다고 생각 하겠지만 놀랍게도 어디서나 명시 적으로 언급 한 어떤 확실한 증거 (즉, 스펙에 대한 참조)를 찾을 수없는 것 같습니다.int16_t의 서명이 보장 되나요?

누군가이 방법으로이를 확인할 수 있습니까? 가능하다면 스펙에 대한 특정 언급을 정말 고맙게 생각합니다.

답변

6

n1256 7.18.1p1는 말한다 :

초기 만에 부재 또는 존재를 다른 형식 정의 이름이 유가 정의

, 그들은 6.235에 기술 된 바와 같이 부호있는 부호없는 부호를 으로 표시해야한다. .5; 이 해당 유형 중 하나를 제공하는 구현은 을 제공해야합니다. int16_tuint16_t가 있으므로

int16_t 따라서 서명된다. 실제로 7.18.1.1p1

또는 :

typedef입니다 이름 intN_t는 폭 N, 아니 패딩 비트와 부호있는 정수 유형 및 2의 보수 표현을 지정합니다. 따라서 int8_t는 너비가 인 부호가있는 정수 유형 을 정확히 8 비트로 나타냅니다.

.

EDIT : 엄격히 말하자면 int16_t는 이 보장되지 않는다는 의미에서 보장되지 않습니다.. 예를 들어 CHAR_BIT == 9 인 경우 int16_t 유형을 사용할 수 없습니다.

+3

이 주제는 7.18.1.1 p1에서보다 명확하게 다룹니다. "typedef 이름 intN_t는 너비 N, 채우기 비트 및 2의 보수 표시가있는 부호있는 정수 유형을 지정합니다." –

+2

"예를 들어'CHAR_BIT == 9 '이면'int16_t' 타입이 없을 수도 있습니다." 읽어야한다 "예를 들어'CHAR_BIT == 9 '이면 **'int16_t' 유형이 될 수 없습니다." –

+0

@R .. 네, 네 말이 맞아 보인다. 2 패딩 비트가있는 18 비트 유형이있을 수 있다고 생각했지만 패딩 비트는 intN_t 유형에서 특별히 허용되지 않습니다. –