c - `uint_fast32_t` 是否保证至少与 `int` 一样宽?

标签 c c99 integer-promotion

C 标准指定小于 int 的整数操作数将在对其执行任何算术运算之前提升为 int。因此,对两个小于 int 的无符号值的运算将使用有符号而不是无符号数学来执行。在确保使用无符号数学对 32 位操作数执行操作很重要的情况下(例如,将乘积可能超过 2⁶³ 的两个数字相乘)将使用类型 uint_fast32_t 由任何标准保证产生没有任何未定义行为的无符号语义?如果不是,是否有任何其他保证至少为 32 位且至少与 int 一样大的无符号类型?

最佳答案

不,不是。在任何情况下,我都建议不要使用 [u]int_fastN_t 类型。在现实世界的系统中,它们被错误定义;例如,uint_fast32_t 通常被定义为 x86_64 上的 64 位类型,尽管 64 位操作最好(加法、减法、逻辑操作)与 32 位操作速度相同,最坏情况下 < strong>慢得多( split 和加载/存储,因为您使用了两倍的缓存行)。

关于c - `uint_fast32_t` 是否保证至少与 `int` 一样宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395590/

相关文章:

c - **标识符 msqid 已从系统中删除**含义

c - 是否可以在 google 中搜索 C 而不会在结果中得到 C++?

c - C语言静态存储 union 和命名成员初始化

c - 为什么使用 0xff 对字符进行按位与运算?

c - C程序中的整数提升

c - 如何在C中对齐指针

c - 如何在结构成员数组中应用限制指针类型关键字?

c - 在 C 中使用 `this` 关键字是否明智?

c - 为什么组合 uint8_t 的两个移位会产生不同的结果?

c - 什么是 char * const *?