这与以下问题有关,

如何在 C 中声明 32 位整数

有几个人提到 int 在大多数平台上始终是 32 位。我很好奇这是否属实。

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

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

有帮助吗?

解决方案

由于几个人都表示,没有保证,一个“诠释”将是32位的,如果你想使用一个特定大小的变量,尤其是写作,涉及的位操作代码时,你应该使用“标准整数类型由C99规范规定的。

int8_t
uint8_t
int32_t
uint32_t

等...

它们通常的形式为[U] intN_t,其中“U”指定要一个无符号的数量,以及N是位的数目的

对于这些正确的类型定义应该是在哪个平台要编译支持,利用这些可以让你写得真好,可移植的代码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:


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

在这个时刻,大多数台式机和服务器平台使用32位整数,甚至许多嵌入式平台(认为手持ARM或x86)使用32位ints。为了得到你要得到确实非常小的16位int:认为“伯克利微尘”或一些较小的爱特梅尔的Atmega芯片。但它们在那里。

没有。小型嵌入式系统使用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;
}

那么,大多数基于ARM的处理器可以运行Thumb代码,这是一个16位模式。这包括但仅传言的Android笔记本和出血边缘的智能手机。

此外,一些图形计算器使用的8位处理器,我会打电话给那些颇具现代也是如此。

TI仍在销售与他们C55x的DSP的OMAP板,主要用于视频解码。我相信这个所提供的编译器有一个16位的整型。这是根本没有恐龙(诺基亚770是在2005年发布),尽管你可以得到32位的DSP。

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

如果你也有兴趣在实际的最大/最小值,而不是位的数量, limits.h中包含你想知道几乎一切。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top