在大多数实现中,我看到uint32_t
被定义为
typedef unsigned int uint32_t;
但是据我了解,ints
在所有系统中都是not always guaranteed to be 4 bytes。因此,如果系统具有非4字节整数,uint32_t
如何保证4?
答案 0 :(得分:6)
需要正确定义uint32_t
的实现(如果不可能的话,则完全不需要定义)。
如果unsigned int
符合要求(32位宽,无填充位),则实现可以将其定义为
typedef unsigned int uint32_t;
如果不是,但是unsigned long
符合要求,则可以将其定义为:
typedef unsigned long uint32_t;
或者如果合适的话,它可以使用其他无符号类型。
<stdint.h>
标头必须与其使用的编译器兼容。如果您将<stdint.h>
标头无条件地将uint32_t
定义为unsigned int
,并将其与使unsigned int
为16位的编译器一起使用,则结果将是不合格的实现
可以通过为编译器定制标头或通过编写标头使其适应于编译器的特性来维护兼容性。
作为一名程序员,您不必担心如何保持正确性(当然,好奇并没有错)。您可以依靠它的正确完成,也可以向提供商投诉严重的错误。
答案 1 :(得分:2)
每个定义ev.target.scrolllHeight.toFixed(2)
的C或C ++实现都以适用于该实现的方式对其进行定义。仅在该实现中uint32_t
对typedef unsigned int uint32_t;
满意的情况下,才可以使用unsigned int
。
在一个C或C ++实现中uint32_t
出现在typedef unsigned int uint32_t;
中这一事实并不意味着它会在<stdint.h>
中出现在任何其他C或C ++实现中。 <stdint.h>
不适合unsigned int
的实现必须提供一个不同的uint32_t
。 <stdint.h>
是实现的一部分,当实现更改时也会更改。
答案 2 :(得分:1)
uint32_t
是否保证32位?
是的
如果CHAR_BIT == 16
,则uint32_t
将是2个“字节”。 C中的“字节”并不总是8位。
int
的大小不是有关实现uintN_t
的主要问题。
uintN_t
(N = 8,16,32,64)是可选的非填充类型,当系统可以支持它们时独立存在。找到它们,特别是大型的实现是非常普遍的。
intN_t
同样是可选的,必须为2的补码。