uint32_t如何保证 32 位?

How does uint32_t guarantee 32 bits?

本文关键字:何保证 uint32      更新时间:2023-10-16

在大多数实现中,我看到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>标头必须与使用它的编译器兼容。如果你采用一个无条件地将uint32_t定义为unsigned int<stdint.h>标头,并将其与unsigned int16 位的编译器一起使用,结果将是不符合的实现。

可以通过为编译器定制标头来维护兼容性,也可以通过编写标头使其适应编译器的特征来维护兼容性。

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

定义uint32_t的每个 C 或 C++ 实现都以适用于该实现的方式定义它。仅当unsigned int对该实现中的uint32_t感到满意时,它才能使用typedef unsigned int uint32_t;

typedef unsigned int uint32_t;

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

uint32_t保证32位?

是的。


如果CHAR_BIT == 16uint32_t将是 2 个"字节"。 "字节"在 C 中并不总是 8 位。

int的大小不是关于实施uintN_t的主要问题。

uintN_t(N = 8,16,32,64( 是可选的非填充类型,当系统可以支持它们时,它们独立存在。 发现它们已实现是极其普遍的,尤其是较大的实现。

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