代码之家  ›  专栏  ›  技术社区  ›  ZZ Coder

C中的int总是32位吗?

int c
  •  20
  • ZZ Coder  · 技术社区  · 16 年前

    这与下面的问题有关,,

    How to Declare a 32-bit Integer in C

    一些人提到int在大多数平台上总是32位的。我很好奇这是不是真的。

    你知道有什么不同大小的int的现代平台吗?忽略具有8位或16位体系结构的恐龙平台。

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

    8 回复  |  直到 9 年前
        1
  •  43
  •   David Claridge    16 年前

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

    int8_t
    uint8_t
    int32_t
    uint32_t
    

    它们的形式通常为[u]intN\t,其中“u”表示需要一个无符号量,N表示位数

    对于这些类型的正确typedef应该在stdint.h中提供,无论您为哪个平台编译,使用它们都可以编写漂亮的可移植代码:-)

        2
  •  17
  •   paxdiablo    8 年前

    ”“是吗 32位on 平台”-这段代码有什么问题吗?:-)

    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


    1. typedef 名称 国际 N ,无填充位,以及2的补码表示。因此 int8_t
    2. 这个 类型定义 名称 uintN\t 指定具有宽度的无符号整数类型 N uint24_t 表示宽度正好为24位的无符号整数类型。
    3. 这些类型是可选的。但是,如果实现提供宽度为8、16、32或64位的整数类型,没有填充位,并且(对于有符号类型)具有2的补码表示,则应定义相应的 类型定义 名字。
        3
  •  9
  •   Norman Ramsey    16 年前

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

        4
  •  4
  •   starblue    16 年前

    不是。小型嵌入式系统使用16位整数。

        5
  •  2
  •   Sinan Ünür    16 年前

    这在很大程度上取决于编译器。有些在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;
    }
    
        6
  •  1
  •   Christoffer    16 年前

    此外,一些图形计算器使用8位处理器,我认为这些处理器也相当现代。

        7
  •  1
  •   Steve Jessop    16 年前

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

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

        8
  •  0
  •   Michael Stum    16 年前

    如果您还对实际的最大/最小值而不是位数感兴趣, limits.h 包含了你想知道的一切。