这与以下问题有关,
许多人提到int是大多数平台上始终为32位。我很好奇是否属实。
您知道是否有任何使用不同大小的int的现代平台吗?请忽略具有8位或16位架构的恐龙平台。
注意:我已经知道如何从其他问题中声明32位整数。这更像是一项调查,以了解支持其他大小的整数的平台(CPU / OS / Compiler)。
这与以下问题有关,
许多人提到int是大多数平台上始终为32位。我很好奇是否属实。
您知道是否有任何使用不同大小的int的现代平台吗?请忽略具有8位或16位架构的恐龙平台。
注意:我已经知道如何从其他问题中声明32位整数。这更像是一项调查,以了解支持其他大小的整数的平台(CPU / OS / Compiler)。
正如其他人所说,不能保证一个'int'类型的变量一定是32位,如果你想使用特定大小的变量,尤其是在编写涉及位操作的代码时,你应该使用c99规范所规定的“标准整数类型”。
int8_t
uint8_t
int32_t
uint32_t
它们通常采用[u]intN_t的格式,其中“u”指定您想要无符号量,N是位数。
这些类型应在stdint.h中以正确的typedef形式提供,无论您在哪个平台上编译,使用它们可以让您编写漂亮、可移植的代码 :-)
[u]intN_t
类型,但不能保证实现将具有此类类型。然而,它们会很少出现,因此如果您的编译器符合 C99 标准,则这可能是最佳方法。 - paxdiablo"在大多数平台上,通常情况下,它的位数始终为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
:
typedef
名称intN_t
指定了一个带有宽度N
、没有填充位以及二进制补码表示的有符号整型。因此,int8_t
表示一个宽度恰好为8位的有符号整数类型。typedef
名称uintN_t
指定了一个带有宽度N
的无符号整型。因此,uint24_t
表示一个宽度恰好为24位的无符号整数类型。typedef
名称。int
能够胜任,但总是使用 long
似乎有些愚蠢。我需要一个能存储从0到999,999,999的数字的变量,而且不想它的宽度为64位(如 long
有时会有的),32位就足够了。看起来很奇怪,整数类型 intN_t
最初没有可用。他们意识到不同比特宽度的CPU将运行C软件,但在30年内他们并没有费心去保证比特宽度的可移植性? - ArtOfWarfare目前大多数桌面和服务器平台使用32位整数,甚至许多嵌入式平台(如手持式ARM或x86)也使用32位int
。要获得16位int
,您必须变得非常小:考虑“伯克利微粒”或一些较小的Atmel Atmega芯片。但是它们确实存在。
许多小型嵌入式系统使用16位整数。
sizeof(int) == 1
。char
和int
都有16位(当然还有short
)。 - starblue这主要取决于您使用的编译器。一些编译器在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;
}
sizeof
可以操作类型,所以不需要randomint
。其次,CHAR_BITS
不能保证为八位。还有一些其他问题,但这些是与问题相关的错误。 - Sinan ÜnürCHAR_BIT
。我在评论中拼错了。 - Sinan ÜnürTI仍在销售带有C55x DSP的OMAP板,主要用于视频解码。我相信为此提供的编译器具有16位int。它几乎不是恐龙(Nokia 770于2005年发布),尽管您可以获得32位DSP。
大多数您编写的代码,您可以安全地假设它永远不会在DSP上运行。但也许并非全部。
大多数基于ARM的处理器都可以运行Thumb代码,这是一种16位模式。这包括尚未公布的Android笔记本电脑和最先进的智能手机。
此外,一些图形计算器使用8位处理器,我认为这些也相当现代化。