Все операции на «стандартном» целочисленные типы со знаком в C (short, int, long и т. д.) демонстрируют неопределенное поведение, если они дают результат за пределами интервала [TYPE_MIN, TYPE_MAX] (где TYPE_MIN, TYPE_MAX - минимальное и максимальное целочисленные значения соответственно. которые могут быть сохранены конкретным целочисленным типом.
Однако согласно стандарту C99 все типы intN_t
должны иметь представление с дополнением до двух:
7.8.11.1 Целочисленные типы точной ширины
1 . Имя typedef intN_t обозначает целочисленный тип со знаком шириной N, без заполнения. биты и представление с дополнением до двух. Таким образом, int8_t обозначает целое число со знаком тип шириной ровно 8 бит.
Означает ли это, что типы intN_t
в C99 демонстрируют четко определенное поведение в случае целочисленного переполнения? Например, четко ли определен этот код?
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main(void)
{
printf("Minimum 32-bit representable number: %" PRId32 "\n", INT32_MAX + 1);
return 0;
}