n1256 7.18.1p1 говорит:
Когда имена typedef отличаются только
отсутствие или наличие исходного
Вы определены, они должны обозначать
соответствующие подписанные и неподписанные
типы, как описано в 6.2.5;
реализация, обеспечивающая один из них
соответствующие типы также должны обеспечивать
другой.
Поскольку существуют int16_t
и uint16_t
, то int16_t
подписывается.
Или действительно 7.18.1.1p1:
Имя typedef intN_t обозначает
целочисленный тип со знаком с шириной N, нет
биты дополнения и дополнение к двум
представление. Таким образом, int8_t обозначает
целочисленный тип со знаком с шириной
ровно 8 бит.
, что более подробно об этом.
РЕДАКТИРОВАТЬ: хотя, строго говоря, int16_t не гарантируется для подписи в том смысле, что не существует . Например, если у вас CHAR_BIT == 9, тип int16_t
не может быть.