【问题标题】:Range of int and long datatypesint 和 long 数据类型的范围
【发布时间】:2010-04-26 13:05:20
【问题描述】:

我在 32 位窗口上了解到 int 和 long 的范围是:

signed int: -32767 to 32767
signed long: -2147483647 to 2147483647

为什么 int 的范围与 msdn 上提到的 long 类型的范围相同? http://msdn.microsoft.com/en-us/library/s3f49ktz%28VS.80%29.aspx

【问题讨论】:

  • @n00b8688:你的意思是 -32768 到 32767 和 -2147483648 到 2147483647?
  • 我的意思是 msdn 上的签名 int –2,147,483,648 到 2,147,483,647。

标签: types range


【解决方案1】:

你的前提是错误的。 intlong 在 32 位和 64 位 Windows 上都是 32 位。

【讨论】:

【解决方案2】:

不要求确切的长度。 强制要求 long 不能小于 int。

http://www.faqs.org/docs/learnc/x401.html

【讨论】:

    【解决方案3】:

    我假设你打算写这个:

    signed int: -2147483647 to 2147483647
    ...
    

    出于完全的历史原因,它们是相同的。 C++ 标准没有规定每种类型的特定大小,这两种类型之间的唯一保证是sizeof(int) <= sizeof(long)

    【讨论】:

      【解决方案4】:

      int 将与 __int16 进行比较,而 long 将与 __int32 进行比较。

      您必须查看 Bytes 列才能了解此内容。

      【讨论】:

        【解决方案5】:

        使用整数的二进制表示时,您可以使用以下公式根据用于表示数据的位数来计算有符号数据类型的最大范围:

        最低值:-2^(N-1) 最高值:2^(N-1) - 1

        其中 N 是位数。

        出于某种原因,您所说的“signed int”类型用 16 位表示,而“signed long”类型用 32 位表示。

        另外请注意,您发布的范围似乎不完整,请注意 16 位有符号整数的范围下降到 -32768,比您发布的范围低一个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-28
          • 2020-04-26
          • 1970-01-01
          • 2020-10-31
          • 1970-01-01
          • 2017-06-29
          相关资源
          最近更新 更多