我正在使用Dev-C ++编译器和wxDev-C ++编译器,同时阅读C ++ Primer Plus以学习编程语言。我的书对整数类型的字面解释如下:
- 一个短整数至少为16位宽。
- 一个int整数是 最短的一样大。
- 长整数至少为32位宽 至少和int一样大。
- 长整数至少为64位宽 至少和长期一样大。
任何人都可以向我解释这个吗?
答案 0 :(得分:2)
好的,我不得不承认,经过长时间的思考,我仍然不明白你需要澄清的地方,但仍会尽力帮助你。
c ++标准没有明确说明short
,int
,long
或long long
使用多少位,而是给出限制,其余部分由实现完成。限制就像你已经列出的那样。
例如:
short
= 16位,int
和
long
都是32位,long long
是64位。short
= 16位,int
= 32位,long
和long long
都是64位。正如你可以看到的实现
long
与众不同。如果您想知道如何找出某个类型在您的平台/编译器上使用的位数,请尝试以下操作:
#include <iostream>
#include <climits>
int main()
{
std::cout << sizeof(int) * CHAR_BIT;
return 0;
}
如果需要,可以用其他类型替换int。
对于某些具有固定位宽的类型,您也可以查看http://en.cppreference.com/w/cpp/types/integer。
我希望能帮到你,因为我真的不知道我能帮助你。
答案 1 :(得分:1)
让我们逐一查看清单。
short
整数至少为16位宽。
这意味着可能存在short
为16位的平台,17位的平台,18位的平台等,但没有平台可以为您提供只有17位的短路比特或更少。
因此,为了论证,让我们定义几个不同的平台,我们只用大写字母命名。假设平台A到D有16位short
,E和F有32位short
,平台G有1024位short
。到目前为止,所有这些平台都符合要求。
int
整数至少与短整数一样大。
这意味着您无法使int
小于short
,但您可以将其设为任意大。例如,上面的平台A到D都可以使用16位int
,但是平台E和F必须使int
至少为32位,平台F必须至少使用1024位。 / p>
假设A选择16位,B,C和E选择32位,D和F选择64位,G再选择1024位。到目前为止,所有这些选择都符合规则。
long
整数至少为32位宽,至少与int
一样大。
这里我们有两个条件。首先,我们要long
必须至少有32位。因此,即使平台A也不能选择long
仅为16位。其次,long
也不能短于int
,这意味着,例如平台D和F
不能有32位long
,因为它会比int
短。对于平台G,long
的最小大小也是1024位。
所以可能的选择是平台A,B和E选择32位长,平台C,D和F选择64位,G选择1024位。
long long
整数至少为64位宽,至少与long
一样大。
不再详述,现在平台A到F都可以选择64位或更大,G可以选择1024位或更大。
让我们假设完整性平台A到D选择64位,E和F选择128位,G选择1024位。
然后我们得到以下所有有效的平台列表(但它们到目前为止并非所有可能的有效平台):
A B C D E F G
short 16 16 16 16 32 32 1024
int 16 32 32 64 32 64 1024
long 32 32 64 64 32 64 1024
long long 64 64 64 64 128 128 1024
平台A将是一个典型的16位平台(当时16位平台是最新的,long long
还不是官方类型)。平台B将是典型的32位平台,但也代表许多64位平台。平台C也是一个可能的64位平台实现。我不相信的所有其他人都可以在任何地方使用,但无论如何它们都是有效的实现。
如您所见,例如某些平台int
的大小与short
大小相同,而在其他平台上大小与long
大小相同,而在其他平台上,它可能介于两者之间,某些平台上{ {1}}和short
可能具有相同的大小,在这种情况下,long
也必须具有相同的大小。
答案 2 :(得分:0)
我猜你只是不明白在现代硬件上如何表示整数。请先阅读有关如何以二进制形式表示数字的信息:
每个位代表数字的二进制表示中的0
或1
。为了表示负数,我们使用了一些特殊的技巧,您可以在这里阅读:
Two's complement(用于签名号码,例如C的int
类型)
该类型只有多少“位宽”限制了该类型可以表示的最大(和最小负数)数。例如,short
类型可以用其16位表示数字-32768
到32767
,而32位整数可以表示-2147483648
到2147483647
。< / p>