关于Dev-C ++中的整数类型的位

时间:2013-07-14 20:56:40

标签: c++ dev-c++

我正在使用Dev-C ++编译器和wxDev-C ++编译器,同时阅读C ++ Primer Plus以学习编程语言。我的书对整数类型的字面解释如下:

  
      
  • 一个短整数至少为16位宽。
  •   
  • 一个int整数是   最短的一样大。
  •   
  • 长整数至少为32位宽   至少和int一样大。
  •   
  • 长整数至少为64位宽   至少和长期一样大。
  •   

任何人都可以向我解释这个吗?

3 个答案:

答案 0 :(得分:2)

好的,我不得不承认,经过长时间的思考,我仍然不明白你需要澄清的地方,但仍会尽力帮助你。

c ++标准没有明确说明shortintlonglong long使用多少位,而是给出限制,其余部分由实现完成。限制就像你已经列出的那样。

例如:

  • 在我的Windows机器上,我得到short = 16位,intlong都是32位,long long是64位。
  • 在我的Linux机器上,我得到short = 16位,int = 32位,longlong 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)

我猜你只是不明白在现代硬件上如何表示整数。请先阅读有关如何以二进制形式表示数字的信息:

Binary number

每个位代表数字的二进制表示中的01。为了表示负数,我们使用了一些特殊的技巧,您可以在这里阅读:

Two's complement(用于签名号码,例如C的int类型)

该类型只有多少“位宽”限制了该类型可以表示的最大(和最小负数)数。例如,short类型可以用其16位表示数字-3276832767,而32位整数可以表示-21474836482147483647。< / p>