在C总是32是int
这与以下问题有关,
如何在C中声明一个32位整数
几个人提到int在大多数平台上总是32位。 我很好奇,如果这是真的。
你是否知道任何具有不同大小int的现代平台? 忽略具有8位或16位体系结构的恐龙平台。
注:我已经知道如何声明另一个问题的32位整数。 这更像是一次调查,以找出哪些平台(CPU / OS /编译器)支持其他大小的整数。
正如一些人所说,如果你想使用特定大小的变量,特别是在编写涉及位操作的代码时,你不应该保证'int'是32位,你应该使用'Standard Integer Types'由c99规范。
int8_t
uint8_t
int32_t
uint32_t
等等...
它们通常是[u] intN_t形式,其中'u'表示您需要一个无符号数量,而N是位数
正确的typedef应该可以在stdint.h中找到,无论你正在编译哪个平台,使用它们都可以编写漂亮的可移植代码:-)
“在大多数平台上总是32位” - 该代码段出了什么问题? :-)
C标准没有规定其变量的大小。 它确实要求相对大小,例如sizeof(int) >= sizeof(short)
等等。 它还要求最小范围,但允许多种编码方案(二进制补码,补码和符号/幅度)。
如果你想要一个特定大小的变量,你需要使用一个适合你所运行的平台的变量,比如使用#ifdef
,如下所示:
#ifdef LONG_IS_32BITS
typedef long int32;
#else
#ifdef INT_IS_32BITS
typedef int int32;
#else
#error No 32-bit data type available
#endif
#endif
另外,C99允许精确的宽度整数类型intN_t
和uintN_t
:
intN_t
指定宽度为N
,无填充位和二进制补码表示的带符号整数类型。 因此, int8_t
表示宽度恰好为8位的带符号整数类型。 uintN_t
指定宽度为N
的无符号整数类型。 因此, uint24_t
表示宽度恰好为24位的无符号整数类型。 此时,大多数台式机和服务器平台都使用32位整数,甚至许多嵌入式平台(认为手持式ARM或x86)都使用32位int
。 要达到16位int
你的确必须小得多:想一想“Berkeley mote”或者一些较小的Atmel Atmega芯片。 但他们在那里。
下一篇: Heap corruption on malloc/calloc of char pointer field in struct