c中的整数大小取决于什么?

整数的大小取决于什么?

C中的int变量的大小是否依赖于机器或编译器?

它依赖于实现。 C标准仅要求:

  • char至少有8位
  • short至少有16位
  • int至少有16位
  • long至少有32位
  • long long至少有64位(1999年增加)
  • sizeof(char)≤sizeof(短)≤sizeof(int)≤sizeof(long)≤sizeof(long long)

在16/32位日, 事实上的标准是:

  • int是“本机”整数大小
  • 其他类型是允许的最小尺寸

但是,64位系统通常不会产生int 64位,这会产生三种64位类型而不是32位类型的尴尬局面。 一些编译器扩展到64位。

它主要取决于编译器。 例如,如果你有一个64位的x86处理器,你可以使用一个旧的16位编译器,获得16位整数,一个32位编译器,得到32位整数,或一个64位编译器,得到64 -bit整数。

它取决于处理器到编译器针对特定处理器的程度,并且(例如)古老的16位处理器根本不会运行针对shiny的新64位处理器的代码。

C和C ++标准确实保证了一些最小大小(通过指定最小支持范围间接):

 char: 8 bits short: 16 bits long: 32 bits long long: 64 bits 

还可以保证大小/范围按以下顺序严格不减小:char,short,int,long和long long 1

在C99和C ++ 0x中指定了1 long long,但是一些编译器(例如,gcc,Intel,Comeau)也允许在C ++ 03代码中使用它。 如果你愿意,你可以说服大多数(如果不是全部)在C ++ 03代码中拒绝long long

forms上,所有基本数据类型(包括其大小)的表示都依赖于编译器,并且仅依赖于编译器。 编译器(或者更确切地说, 实现 )可以充当程序和机器之间的抽象层,完全隐藏机器或者以任何方式扭曲程序。

但实际上,编译器旨在为给定的机器和/或操作系统生成最有效的代码。 为了实现这一点,基本数据类型应该具有给定机器和/或OS的自然表示。 从这个意义上讲,这些表示间接依赖于机器和/或OS。

换句话说,从抽象的,forms的和迂腐的角度来看,编译器可以完全忽略特定于机器的数据类型表示。 但这没有实际意义。 在实践中,编译器充分利用机器提供的数据类型表示。

但是,如果机器不支持某些数据类型,编译器仍然可以通过在编译器级别实现其支持(“模拟”它)来向程序提供该数据类型。 例如,对于32位计算机,32位编译器通常可以使用64位整数类型,即使它们不受机器直接支持。 在当天,编译器通常会为没有配备浮点协处理器的机器提供编译器级别的浮点类型支持(因此不直接支持浮点类型)。

正如MAK所说,它依赖于实现。 这意味着它取决于编译器。 通常,编译器以单个计算机为目标,因此您也可以将其视为与计算机相关的。

AFAIK,数据类型的大小取决于实现 。 这意味着完全由实现者(即编写编译器的人)来选择它将是什么。

所以,简而言之,它取决于编译器。 但是,通常使用最容易映射到底层机器的字大小的任何大小都会更简单 – 因此编译器通常使用最适合底层机器的大小。

无论您使用何种硬件,都取决于运行环境。 如果你使用像DOS这样的16位操作系统,那么它将是2个字节。 在Windows或Unix等32位操作系统上,它是4个字节,依此类推。 即使您在64位处理器上运行32位操作系统,大小也只有4个字节。 我希望这有帮助。

它取决于架构(机器,可执行类型)和编译器。 C和C ++只保证某些最小值。 (我认为那些是char:8位,int:16位,long:32位)

C99包括某些已知的宽度类型,如uint32_t(如果可能)。 请参见stdint.h

更新 :解决了Conrad Meyer的担忧。

整数变量的大小取决于编译器的类型:

  • 如果你有一个16位编译器:

     size of int is 2 bytes char holds 1 byte float occupies 4 bytes 
  • 如果您有32位编译器:

    在16位编译器中,每个变量的大小只是其大小的两倍

     int hold 4 bytes char holds 2 bytes float holds 8 bytes 

如果您有64位编译器,则会发生同样的事情,依此类推。