我从书中听到过关于C / C ++中整数类型的最小尺寸的介绍
以下尺寸以字节为单位:
sizeof(char) >= 1
sizeof(short) >= 2
sizeof(long) >= 4
sizeof(long long) >= 8
但我无法在标准中找到这些保证。 那么编译器是否需要保证在C ++ 98 / C ++ 2003 / C89 / C99标准中定义实现?
答案 0 :(得分:6)
这不正确,你的值乘以8.(注意,sizeof 1并不一定意味着8位,char中的位数是CHAR_BIT
- 很可能8虽然)。
sizeof(char)
保证为1
。 (以及unsigned char
和signed char
)。
除此之外,
应用于任何其他基本类型(3.9.1)的sizeof的结果是 实现定义。 (5.3.3尺寸)
sizeof(char) <= sizeof(int) <= sizeof(long long)
符合排序限制。
答案 1 :(得分:2)
这里The C++ Programming Language Fourth Edition by Bjarne Stroustrup
对此事说了什么。
C ++对象的大小以char
的大小的倍数表示,因此根据定义,char
的大小为1.
• 1 ≡ sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
• 1 ≤ sizeof(bool) ≤ sizeof(long)
• sizeof(char) ≤ sizeof(wchar_t) ≤ sizeof(long)
• sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
• sizeof(N) ≡ sizeof(signed N) ≡ sizeof(unsigned N)
在最后一行中,N
可以是char
,short
,int
,long
或long long
。此外,保证char
至少有8位,short
至少16位,long
至少32位
答案 2 :(得分:2)
因为没有。标准仅定义了有关值的一些基本保证和要求。您可以在第33页找到它们in this document:
5.2.4.2.1整数类型的大小。
你可以肯定:
sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
和
sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
此外:
sizeof(char)
保证为1 sizeof(char) == sizeof(signed char) == sizeof(unsigned char)
此外,在大多数平台上:
sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
(1)
(1)long long
不是标准类型。 GCC和VC ++已经支持它很长一段时间了,但C ++ 11提供了官方支持:
long long
- 目标类型的宽度至少为64位。 (自C ++ 11起)
请注意,即使sizeof(char)
保证为1
,也不代表char
为8位长。 CHAR_BIT
定义char
类型的位数。目前,几乎所有架构每个字节使用8位,但是一些旧架构过去常常使用7位。