Gab*_* L. 16 c++ integer stdint c++11
我在中看到了不同类型的整数定义stdint.h
.我将以无符号32位整数为例.
uint32_t
清楚地表示32位的无符号整数.这就是我经常使用的那个.
uint_fast32_t
和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; };
Run Code Online (Sandbox Code Playgroud)
我对吗 ?并且,您是否建议我使用uint48_t
我的48位无符号整数或我应该使用正常uint64_t
?
谢谢你的解释.
Ste*_*sop 22
与uint32_t的区别是什么
uint_fast32_t
是一种至少32位的无符号类型(以某种通用方式)是最快的类型."快速"意味着给定一个选择,实现者可能会选择体系结构具有算术,加载和存储指令的大小.它不是任何特定基准的赢家.
uint_least32_t
是至少32位的最小无符号类型.
uint32_t
如果存在任何这样的类型,则是没有填充的正好32位的类型.
我对吗?
不.如果uint24_t
存在则那么它是整数类型,而不是struct
.如果在此实现中没有24位的无符号整数类型,则它不存在.
由于unsigned long
需要为至少32位,唯一的标准类型的uint24_t
可能可能永远是一个别名是char
,unsigned char
,unsigned short
和unsigned int
.或者,它可以是扩展类型(即,由实现提供的整数类型,不是标准中任何定义的整数类型).
你会建议我使用uint48_t作为我的48位无符号整数吗?
如果它存在并且是您想要的大小,那么您也可以使用它.但是,它不会存在于很多实现中,因此它仅适用于非可移植代码.如果您必须处理精确的48位整数是特定于平台的原因,那就没问题.
确切的16,32和64位类型在技术上也是可选的,但如果实现具有合适的整数类型,则它们必须存在."合适"不仅意味着存在精确的N位无符号类型而没有填充位,而且相应的带符号类型没有填充位并使用2的补码表示.在实践中,这是如此接近于任何地方,你通过使用它们中的任何一个来限制可移植性.为了获得最大的便携性,您应该使用uint_least32_t
或uint_fast32_t
优先使用uint32_t
.哪一个取决于您是否更关心速度或尺寸.根据我的经验,很少有人会烦恼,因为没有32位整数类型的平台已经非常奇怪,以至于大多数人并不关心他们的代码是否在其上运行.
Ker*_* SB 14
uint32_t
仅当平台支持正好为32位宽并且没有填充的无符号整数类型时才存在.
uint32_least_t
始终存在并且是一个至少32位的无符号整数类型,它是最小的类型.
uint32_fast_t
也总是存在并且是至少32位的整数类型,并且它是平台的"最自然"类型,即操作生成最有效代码的类型.
注意:签名版本int32_t
也需要2的补码表示.
归档时间: |
|
查看次数: |
6176 次 |
最近记录: |