haskell - Abs 和 minBound
问题描述
在各种情况下使用 minBound 时,我尝试了
> minBound :: Int
=> -9223372036854775808
这似乎是合理的。
然而,
> abs minBound :: Int
=> -9223372036854775808
这怎么可能?不应该abs x >= 0
,假设x :: Int
?
我在这里缺少对语义的某种理解吗?
解决方案
Prelude> minBound :: Int
-9223372036854775808
Prelude> maxBound :: Int
9223372036854775807
请注意,该数字9223372036854775808
不能表示为整数。这是此处可能在背景中使用的二进制补码表示的结果。的绝对值minBound
不能表示为 type 的成员Int
,因此您最终会得到一个溢出的值。
推荐阅读
- crystal-reports - 如何使用 Crystal Reports 记录选择从列表中进行选择并包含特定字段
- python - Alembic SQLAlchemy 自动生成元数据错误
- netbeans - 使用包引用函数时出错
- c# - 根据 TimeZoneInfo 计算的 UTC 日期时间不正确
- graphql - GraphQL:探索没有通配符 (*) 的 API?
- javascript - 如何从容器更新组件的状态?
- vb.net - 拖放不适用于快捷方式或exe文件
- jenkins - Jenkins Bitbucket Notifier 使用管道时不通知
- flutter - Flutter Firebase上市时收到的错误
- node.js - WebStorm 已将目录中的所有文件标记为非项目文件