gpt4 book ai didi

c - 整数提升、值位和乘法

转载 作者:行者123 更新时间:2023-11-30 17:14:43 24 4
gpt4 key购买 nike

如果我们乘以两个 uint32_t类型,他们类型 int在该系统上有 63 个值位和 1 个符号位,那么这些值将转换为 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大小的平台很常见,我的结论正确吗?程序员期望结果会换行,因为类型是无符号的,但整数提升将由于有符号溢出而导致未定义的行为。

最佳答案

如果您有这样一个不起眼的 64 位 int 类型,只有 32 个值位,它仍然具有与 uint32_t 相同的精度。鉴于 6.3.1.1 在确定转换等级时似乎只关心精度,我不认为 64 位 int 具有与 uint32_t 相同的值位数,可视为具有较高的转化排名。因此不应发生整数提升。

无论是否有整数提升,您当然仍然会溢出,因为 UINT32_MAX*2 无法容纳 uint32_t 或您特有的 64-bit-with-32-值位int

关于c - 整数提升、值位和乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com