-3

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

  • 短整数至少为 16 位宽。
  • 一个 int 整数至少和 short 一样大。
  • 长整数至少为 32 位宽,并且至少与 int 一样大。
  • 一个 long long 整数至少有 64 位宽,并且至少与 long 一样大。

谁能给我解释一下?

4

3 回答 3

2

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

c++ 标准没有明确说明使用多少位short、、或使用int,而是给出限制并将其余部分留给实现。限制就像您已经列出的一样。longlong long

例如:

  • 在我的 Windows 机器上,我得到了short= 16 位,int两者 long都是 32 位和long long64 位。
  • 在我的 Linux 机器上,我得到了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以了解某些具有固定位宽的类型。

我希望这对您有所帮助,因为我真的不知道我还能提供什么帮助。

于 2013-07-14T21:24:40.103 回答
2

让我们一一浏览列表。

  • 整数至少为short16 位宽。

    这意味着可能存在 ashort为 16 位的平台、a 为 17 位的平台、平台为 18 位等,但没有平台可以为您提供只有 17 位或更少的 short。

    所以,为了论证,让我们定义几个不同的平台,我们只是用大写字母命名。假设平台 A 到 D 有 16 位short,E 和 F 有 32 位short,平台 G 有 1024 位short。到目前为止,所有这些平台都符合要求。

  • 一个int整数至少和 short 一样大。

    这意味着您不能将其int设为小于short,但可以将其设为任意大。例如,上面的平台 A 到 D 都可以使用 16 位int,但平台 E 和 F 必须int至少使用 32 位,平台 F 必须至少使用 1024 位。

    假设 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平台上与也必须具有相同的大小。shortlongint

于 2013-07-14T21:54:42.543 回答
0

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

二进制数

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

二进制补码(用于有符号数,例如 C 的int类型)

该类型有多少“位宽”只是限制该类型可以表示的最大(和最小负数)数。例如,short类型可以用它的 16 位表示数字-3276832767而 32 位整数可以表示-2147483648to 2147483647

于 2013-07-14T21:01:26.437 回答