Int 和 Integer 有啥区别?

Posted

技术标签:

【中文标题】Int 和 Integer 有啥区别?【英文标题】:What is the difference between Int and Integer?Int 和 Integer 有什么区别? 【发布时间】:2011-03-26 15:36:32 【问题描述】:

在 Haskell 中,IntInteger 有什么区别?答案记录在哪里?

【问题讨论】:

【参考方案1】:

Int 是机器整数的类型, 至少有保证范围 -229 到 229 - 1,而 Integer 是任意精度整数,具有 范围与您的内存一样大。

https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html

【讨论】:

【参考方案2】:

“整数”是任意精度 类型:它将保存任何数字 不管多大,到极限 你机器的内存……这意味着你从来没有 算术溢出。在另一 手这也意味着你的算术是 比较慢。 Lisp 用户可以 在这里识别“bignum”类型。

“Int”是更常见的 32 位或 64 位 整数。实现方式不同, 虽然它保证在 至少 30 位。

来源:The Haskell Wikibook。此外,您可能会发现 Haskell 简介 中的 Numbers 部分很有用。

【讨论】:

根据this answer,使用Integer通常比is快 @Maarten,这只是因为Int64 在 32 位系统上的实现相当糟糕。在 64 位系统上,这很棒。【参考方案3】:

Int 是 C 的 int,表示它的取值范围是 -2147483647 到 2147483647, 而整个 Z 集合中的 Integer 范围,这意味着它可以任意大。

$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)

注意 Int 字面量的值。

【讨论】:

GHCi,版本 7.10.3 给出警告:文字 12345678901234567890 超出 Int 范围 -9223372036854775808..9223372036854775807【参考方案4】:

前奏只定义了最 基本数字类型:固定大小 整数 (Int),任意精度 整数(整数),...

...

有限精度整数类型 Int 至少涵盖范围 [ - 2^29, 2^29 - 1]。

来自 Haskell 报告:http://www.haskell.org/onlinereport/basic.html#numbers

【讨论】:

【参考方案5】:

IntBounded,这意味着您可以使用minBoundmaxBound 找出限制,这些限制取决于实现但保证至少保持[-229 sup> .. 229-1].

例如:

Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)

但是,Integer 是任意精度,而不是 Bounded

Prelude> (minBound, maxBound) :: (Integer, Integer)

<interactive>:3:2:
    No instance for (Bounded Integer) arising from a use of `minBound'
    Possible fix: add an instance declaration for (Bounded Integer)
    In the expression: minBound
    In the expression: (minBound, maxBound) :: (Integer, Integer)
    In an equation for `it':
        it = (minBound, maxBound) :: (Integer, Integer)

【讨论】:

【参考方案6】:

Integer 被实现为Int#,直到它大于Int# 可以存储的最大值。那时,它是一个GMP 号码。

【讨论】:

这听起来是特定于实现的。是否有参考说 Integer 需要以这种方式实现? 不,你是对的,这是特定于 GHC 的。也就是说,1. GHC 是大多数人使用的,2. 这是我能想到的实现这种数据类型的最智能的方式。 这是否意味着(在 GHC 中)使用Integer 没有性能折衷,因此Integer 总是更好的选择?

以上是关于Int 和 Integer 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

integer和int有啥区别

Int 和 Integer 有啥区别?

int[] 和 Integer[] 数组 - 有啥区别?

PHP中int和integer有啥区别?

int[ ] 和 Integer [ ] 有啥区别 [重复]

Scala中的Int和Integer有啥区别?