如果我们将两种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 平台很常见,我的结论是否正确?由于类型是无符号的,程序员期望结果会换行,但整数提升会因为有符号溢出而导致未定义的行为。