如果我们将两种uint32_t类型相乘,并且它们int在该系统上的类型有 63 个值位和一个符号位,那么这些值将转换为int(整数提升)、相乘并转换回uint32_t. 中间结果不能用int:表示2^32-1 * 2^32-1 > 2^63-1,并触发有符号整数溢出,导致未定义的行为。
的UINT32_MAX值为2^32-1,因为uint32_t保证有 32 个值位。
uint32_t a = UINT32_MAX ;
uint32_t b = UINT32_MAX ;
uint32_t c = a*b ;
由于具有 64 位大小的 int 平台很常见,我的结论是否正确?由于类型是无符号的,程序员期望结果会换行,但整数提升会因为有符号溢出而导致未定义的行为。