gpt4 book ai didi

clojure - Clojure 中没有整数溢出?

转载 作者:行者123 更新时间:2023-12-03 00:30:36 24 4
gpt4 key购买 nike

我在阅读《The Joy Of Clojure》时,正在 IntelliJ IDEA 中使用 La Clojure 运行 Clojure 1.3.0,在第 4.1.3 节(第 64 页)中,作者使用以下代码演示了整数溢出:

(+ Integer/MAX_VALUE Integer/MAX_VALUE)
;=> java.lang.ArithmeticException: integer overflow

但是,当我在 REPL 上尝试时,我得到的却是

user=> (+ Integer/MAX_VALUE Integer/MAX_VALUE)
4294967294

user=> Integer/MAX_VALUE
2147483647

这里发生了什么?为什么我的整数被正确添加而不是溢出?

最佳答案

(已编辑) 如果需要,Clojure(至少 1.3.0)会自动将整数转换为 long。有关 Clojure 1.3.0 中自动装箱、提升和原始数字类型支持的更多详细信息,请查看 Documentation for Clojure 1.3.0 Numerics .

没有溢出的原因是 Clojure 自动将整数转换为长整型,因此 (+ Integer/MAX_VALUE Integer/MAX_VALUE) 添加两个长整型:

user> (type Integer/MAX_VALUE)
java.lang.Long

关于clojure - Clojure 中没有整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com