C++中字长、字符大小、整数大小和字节之间的关系是什么?
6 回答
该标准要求某些类型具有最小大小(short 至少为 16 位,int 至少为 16 位等),并且某些类型组是有序的(sizeof(int)
>= sizeof(short)
>= sizeof(char)
)。
在 C++ 中,char 必须足够大以容纳实现的基本字符集中的任何字符。
int
具有“执行环境架构建议的自然大小”。请注意,这意味着 int的大小不需要至少为 32 位。16 位的实现int
很常见(想想嵌入式 ot MS-DOS)。
以下内容来自 C++98 和 C99 标准的各个部分:
long int
必须至少与int
int
必须至少与short
short
必须至少与char
请注意,它们可能都具有相同的大小。
另外(假设一个二进制补码实现):
long int
必须至少为 32 位int
必须至少为 16 位short
必须至少为 16 位char
必须至少为 8 位
标准不知道处理器使用的这个“词”。但它说“int”类型应该具有执行环境的自然大小。但即使对于 64 位环境,int 通常也只有 32 位。所以标准术语中的“单词”几乎没有共同的含义(当然除了常见的英语“单词”)。
字符大小是字符的大小。那要看你说的是什么角色了。字符类型有 char、unsigned char 和 signed char。wchar_t 还用于存储可以具有任何大小的字符(由实现确定 - 但必须使用其中一种整数类型作为其基础类型。很像枚举),而 char/signed char 或 unsigned char 必须有一个字节。这意味着一个字节的位数与一个字符的位数一样多。如果一个实现说一个 char 类型的对象有 16 位,那么一个字节也有 16 位。
现在一个字节是一个字符占用的大小。它是一个单位,而不是某种特定类型。没有更多关于它的内容,只是它是您可以访问内存的单元。即您没有对位域的指针访问权限,但您可以访问从一个字节开始的单元。
“整数大小”现在很宽。你什么意思?所有 bool、char、short、int、long 和它们的 unsinged 对应物都是整数。它们的范围就是我所说的“整数大小”,它记录在 C 标准中 - 由 C++ 标准接管。对于有符号字符,范围是 -127 <-> 127,对于 short 和 int,它是相同的,并且是 -2^15+1 <-> 2^15-1,对于 long,它是 -2^31+1 < -> 2^31-1。它们的无符号对应值分别从 0 到 2^8-1、2^16-1 和 2^32-1。然而,这些都是最小的尺寸。也就是说,一个 int 在任何平台上都可能没有最大大小 2^14,因为它当然小于 2^15-1。对于这些值,需要最少的位。对于 char 是 8,对于 short/int 是 16,对于 long 是 32。两个'-128
而不是-127
例如签名字符。
标准 C++ 没有称为word
or的数据类型byte
。其余的都很好地定义为范围。基地是一个char
有CHAR_BITS
位。CHAR_BITS 最常用的值为 8。
sizeof( char ) == 1 ( 一个字节 ) (在 c++ 中,在 C 中 - 未指定)
sizeof( int ) >= sizeof( char )
word - 不是 c++ 类型,通常在计算机体系结构中表示 2 个字节
有点取决于你所说的关系。数字类型的大小通常是机器字大小的倍数。一个字节就是一个字节就是一个字节——8位,不多也不少。我相信一个字符在标准中定义为单个无符号字节(请查看您的 ARM 了解详细信息)。
一般规则是,不要对数据类型的实际大小做出任何假设。该标准规定了类型之间的关系,例如“long”整数将与“int”大小相同或大于“int”。该语言的各个实现将为他们方便的类型选择特定的大小。例如,64 位处理器的编译器将选择与 32 位处理器的编译器不同的大小。
您可以使用 sizeof() 运算符来检查您正在使用的编译器的特定大小(在特定目标体系结构上)。