В C99 существуют некоторые (необязательные) типы, такие как int8_t
, int16_t
и т.п., которые гарантированно имеют точно указанную ширину и не имеют битов заполнения и представляют числа в двух дополнениях (7.18.1.1), В 6.2.6.2 подписанное целочисленное переполнение упоминается как сноски 44) и 45), а именно, что это может привести к улавливанию значений в битах заполнения.
Поскольку intN_t
не имеют каких-либо битов заполнения, и они гарантированно являются двумя дополнениями, означает ли это, что их переполнение не генерирует никакого поведения undefined? Что было бы результатом, например, переполненное умножение? Как насчет добавления? Является ли результат уменьшенным по модулю 2^N
как для неподписанных типов?