[英]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_t
, int
的大小不是主要問題。
uintN_t
(N = 8,16,32,64)是可選的非填充類型,它們在系統能夠支持它們時才獨立存在。 找到實施它們的情況是非常普遍的,尤其是大型的。
intN_t
同樣是可選的,必須為2的補碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.