Гарантируется ли подпись int16_t? - PullRequest
3 голосов
/ 09 января 2011

Является ли тип int16_t, объявленный в <stdint.h> , гарантированным для подписи, или это просто предполагается для подписи?Я предположил бы, что это должно было бы быть подписано, но удивительно, что я, кажется, не могу найти никаких веских доказательств (то есть ссылок на спецификацию), которые явно упоминают это где-либо.Я бы очень признателен за конкретные ссылки на спецификации, если это вообще возможно.

Ответы [ 2 ]

6 голосов
/ 09 января 2011

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 не может быть.

3 голосов
/ 09 января 2011

Да, int16_t гарантированно будет подписано как дополнение к двум согласно спецификации ISO.

...