在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_tuintN_t


  • typedef名称intN_t指定宽度为N ,无填充位和二进制补码表示的带符号整数类型。 因此, int8_t表示宽度恰好为8位的带符号整数类型。
  • typedef名称uintN_t指定宽度为N的无符号整数类型。 因此, uint24_t表示宽度恰好为24位的无符号整数类型。
  • 这些类型是可选的。 但是,如果实现提供宽度为8,16,32或64位的整数类型,没有填充位,并且(对于有符号类型)具有二进制补码表示,则它应该定义相应的typedef名称。

  • 此时,大多数台式机和服务器平台都使用32位整数,甚至许多嵌入式平台(认为手持式ARM或x86)都使用32位int 。 要达到16位int你的确必须小得多:想一想“Berkeley mote”或者一些较小的Atmel Atmega芯片。 但他们在那里。

    链接地址: http://www.djcxy.com/p/80415.html

    上一篇: Is int in C Always 32

    下一篇: Heap corruption on malloc/calloc of char pointer field in struct