繁体   English   中英

uint32_t如何保证32位?

[英]How does uint32_t guarantee 32 bits?

在大多数实现中,我已经看到uint32_t定义为

typedef unsigned int uint32_t;

但是据我了解,在所有系统中, ints 并不总是保证为4字节 因此,如果系统具有非4字节整数,那么uint32_t如何保证4?

需要正确定义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位的编译器一起使用,则结果将是不合格的实现。

可以通过为编译器定制标头或通过编写标头以使其适应编译器的特性来保持兼容性。

作为程序员,您不必担心如何保持正确性(当然,好奇并没有错)。 您可以依靠它的正确完成-或者您可以向提供商投诉严重的错误。

每个定义uint32_t C或C ++实现都以适用于该实现的方式对其进行定义。 它可以使用typedef unsigned int uint32_t; 仅当unsigned int对于该实现中的uint32_t令人满意时。

typedef unsigned int uint32_t; 出现在<stdint.h>在一个C或C ++实现并不意味着它会出现在<stdint.h>对任何其他C或C ++实现。 unsigned int不适合uint32_t必须提供一个不同的<stdint.h> <stdint.h>是实现的一部分,当实现更改时也会更改。

uint32_t保证32位?

是。


如果CHAR_BIT == 16 ,则uint32_t将为2个“字节”。 C中的“字节”并不总是8位。

关于实现uintN_tint的大小不是主要问题。

uintN_t (N = 8,16,32,64)是可选的非填充类型,它们在系统能够支持它们时才独立存在。 找到实施它们的情况是非常普遍的,尤其是大型的。

intN_t同样是可选的,必须为2的补码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM