整数的大小取决于什么?
C中int变量的大小是否依赖于机器或编译器?
答案 0 :(得分:11)
它依赖于实现。 C标准只要求:
char
至少有8位short
至少有16位int
至少有16位long
至少有32位long long
至少有64位(1999年添加)在16/32位日,事实上的标准是:
int
是“原生”整数尺寸然而,64位系统通常不使int
64位,这将产生具有三种64位类型而没有32位类型的尴尬局面。 一些编译器将long
扩展为64位。
答案 1 :(得分:7)
主要取决于编译器。例如,如果你有一个64位的x86处理器,你可以使用一个旧的16位编译器,获得16位整数,一个32位编译器,得到32位整数,或一个64位编译器,得到64 -bit整数。
这取决于处理器到编译器针对特定处理器的程度,并且(例如)一个古老的16位处理器根本不会运行针对闪亮的新64位处理器的代码。
C和C ++标准确实保证了一些最小尺寸(通过指定最小支持范围间接):
char: 8 bits
short: 16 bits
long: 32 bits
long long: 64 bits
还保证尺寸/范围严格按照以下顺序不减少:char,short,int,long和long long 1 。
1 long long在C99和C ++ 0x中指定,但是一些编译器(例如gcc,Intel,Comeau)也允许在C ++ 03代码中使用它。如果你愿意,你可以说服大多数(如果不是全部)拒绝C ++ 03代码中的long long
。
答案 2 :(得分:6)
形式上,所有基本数据类型(包括其大小)的表示都依赖于编译器,并且仅依赖于编译器。编译器(或者更确切地说,实现)可以作为程序和机器之间的抽象层,完全隐藏机器或者以任何方式扭曲程序。
但实际上,编译器旨在为给定的机器和/或操作系统生成最有效的代码。为了实现这一点,基本数据类型应该具有给定机器和/或OS的自然表示。从这个意义上讲,这些表示间接依赖于机器和/或操作系统。
换句话说,从抽象的,形式的和迂腐的角度来看,编译器可以完全忽略特定于机器的数据类型表示。但这没有实际意义。实际上,编译器会充分利用机器提供的数据类型表示。
但是,如果机器不支持某些数据类型,编译器仍然可以通过在编译器级别实现其支持(“模拟”它)来向程序提供该数据类型。例如,对于32位计算机,32位编译器通常可以使用64位整数类型,即使它们不受机器直接支持。在当天,编译器通常会为没有配备浮点协处理器的机器提供浮点类型的编译器级支持(因此不直接支持浮点类型)。
答案 3 :(得分:2)
正如MAK所说,它依赖于实现。这意味着它取决于编译器。通常,编译器以单个计算机为目标,因此您也可以将其视为与计算机相关的。
答案 4 :(得分:2)
AFAIK,数据类型的大小是依赖于实现的。这意味着完全由实现者(即编写编译器的人)来选择它将会是什么。
因此,简而言之,它取决于编译器。但是,通常使用最容易映射到底层机器的字大小的任何大小都更简单 - 因此编译器通常使用最适合底层机器的大小。
答案 5 :(得分:0)
它取决于架构(机器,可执行类型)和编译器。 C和C ++只保证某些最小值。 (我认为那些是char:8位,int:16位,长:32位)
C99包括某些已知的宽度类型,如uint32_t(如果可能)。见stdint.h
更新:解决了Conrad Meyer的担忧。
答案 6 :(得分:0)
无论您使用何种硬件,都取决于运行环境。如果你使用像DOS这样的16位操作系统,那么它将是2个字节。在Windows或Unix等32位操作系统上,它是4个字节,依此类推。即使您在64位处理器上运行32位操作系统,大小也只有4个字节。我希望这会有所帮助。
答案 7 :(得分:0)
整数变量的大小取决于编译器的类型:
如果您有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位编译器,则会发生同样的事情,依此类推。