如果对 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;
}