我在中看到了不同类型的整数定义stdint.h
。我将以无符号 32 位整数为例。
uint32_t
显然意味着 32 位无符号整数。这是我经常使用的。
uint_fast32_t
and uint_least32_t
: 和有什么区别uint32_t
我什么时候应该使用它们而不是uint32_t
?
而现在,我看到了uintX_t
其中 X 是 24、40、48 和 56。在我的代码中,我必须使用 48 和 56 位整数。举个例子,我想uint24_t
定义如下:
struct uint24_t { unsigned int the_integer : 24; };
我对吗 ?而且,你会建议我使用uint48_t
对于我的 48 位无符号整数,或者我应该使用普通的uint64_t
?
感谢您的解释。
与 uint32_t 有什么区别
uint_fast32_t
是至少 32 位的无符号类型,它(以某种通用方式)是此类类型中最快的。 “快速”意味着如果有选择,实现者可能会选择架构具有算术、加载和存储指令的大小。它不是任何特定基准的获胜者。
uint_least32_t
是至少 32 位的最小无符号类型。
uint32_t
是一种没有填充的 32 位类型(如果存在此类类型)。
我对吗?
No. If uint24_t
存在的话它是一个整数类型,而不是一个struct
。如果此实现中不存在 24 位无符号整数类型,则它不存在。
Since unsigned long
要求至少为 32 位,这是唯一的标准类型uint24_t
可能是 are 的别名char
, unsigned char
, unsigned short
and unsigned int
。或者,它可以是扩展类型(即,实现提供的整数类型不是标准中定义的任何整数类型)。
您会建议我对 48 位无符号整数使用 uint48_t 吗?
如果它存在并且是您想要的大小,那么您不妨使用它。但是,它不会存在于很多实现中,因此它仅适合在不可移植代码中使用。没关系,只要您必须处理精确的 48 位整数的原因是特定于平台的。
确切的 16、32 和 64 位类型在技术上也是可选的,但如果实现具有合适的整数类型,则需要它们存在。 “合适”不仅意味着存在精确的N位无符号类型且没有填充位,而且还意味着对应的有符号类型没有填充位并且使用2的补码表示。实际上,这与任何地方都非常接近,因此使用它们中的任何一个都几乎不会限制可移植性。为了获得最大的便携性,尽管您应该使用uint_least32_t
or uint_fast32_t
优先于uint32_t
。哪一个取决于你更关心速度还是大小。根据我的经验,很少有人会为此烦恼,因为没有 32 位整数类型的平台已经很奇怪,以至于大多数人不关心他们的代码是否在其上运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)