C中的int总是32位吗?

时间:2009-08-05 04:09:07

标签: c int

这与以下问题有关,

How to Declare a 32-bit Integer in C

在大多数平台上,有几个人提到int总是32位。如果这是真的,我很好奇。

你知道任何具有不同大小的int的现代平台吗?忽略具有8位或16位架构的恐龙平台。

注意: 我已经知道如何从另一个问题声明一个32位整数。这个更像是一项调查,以找出哪些平台(CPU / OS /编译器)支持其他大小的整数。

8 个答案:

答案 0 :(得分:41)

正如有几个人所说,不能保证'int'将是32位,如果你想使用特定大小的变量,特别是在编写涉及位操作的代码时,你应该使用'标准整数c99规范规定的类型。

int8_t
uint8_t
int32_t
uint32_t

等...

它们的形式通常为[u] intN_t,其中'u'指定您需要无符号数量,N是位数

在你正在编译的平台上,stdint.h中应该提供正确的typedef,使用这些可以编写漂亮的可移植代码: - )

答案 1 :(得分:16)

始终 平台上的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


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

答案 2 :(得分:6)

目前,大多数桌面和服务器平台都使用32位整数,甚至许多嵌入式平台(比如手持式ARM或x86)都使用32位int。要获得16位int,你必须确实变得非常小:想想“Berkeley mote”或者一些较小的Atmel Atmega芯片。但他们在那里。

答案 3 :(得分:3)

没有。小型嵌入式系统使用16位整数。

答案 4 :(得分:2)

这在很大程度上取决于你的编译器。有些人在64位机器上将它们编译为64位,有些将它们编译为32位。嵌入式系统是他们自己的小蜡球。

你可以做的最好的事情是检查:

printf("%d\n", sizeof(int));

请注意sizeof将打印出字节。请sizeof(int)*CHAR_BIT获取位数。

打印各种类型的位数的代码:

#include <limits.h>
#include <stdio.h>

int main(void) {
    printf("short is %d bits\n",     CHAR_BIT * sizeof( short )   );
    printf("int is %d bits\n",       CHAR_BIT * sizeof( int  )    );
    printf("long is %d bits\n",      CHAR_BIT * sizeof( long )    );
    printf("long long is %d bits\n", CHAR_BIT * sizeof(long long) );
    return 0;
}

答案 5 :(得分:1)

好吧,大多数基于ARM的处理器都可以运行Thumb代码,这是一种16位模式。其中包括尚未传闻的Android笔记本电脑和最前沿的智能手机。

另外,一些图形计算器使用8位处理器,我也称它们相当现代。

答案 6 :(得分:1)

TI还在销售带有C55x DSP的OMAP主板,主要用于视频解码。我相信为此提供的编译器有一个16位int。它几乎不是恐龙(诺基亚770于2005年发布),尽管你可以获得32位DSP。

您编写的大多数代码都可以安全地假设它不会在DSP上运行。但也许不是全部。

答案 7 :(得分:0)

如果您对实际的最大值/最小值而不是位数感兴趣,limits.h几乎包含您想知道的所有内容。