在Eiffel中,类型的大小是INTEGER
多少?
我找不到它,除了这里,它声称大小是 32 位。
在这种情况下,Eiffel 如何处理溢出?它是像 C 中那样未定义的行为吗?还是有防止溢出的机制?
如果有任何资源我可以找到它,那么请指导我。
根据ECMA 标准 INTEGER
,它被定义为整数类大小变体之一的别名,建议大小为 64 位。但是,由于存在大量现有代码,当前的实现仍然使用 32 位整数INTEGER
。大小可以由编译器选项设置(例如,EiffelStudio使用 Eiffel 配置文件 (ECF) 映射INTEGER
到INTEGER_32
,这是在核心库中完成的Base
)。INTEGER
原则上,库或应用程序可以使用类型映射为类型指定不同的大小。该机制不是 Eiffel 语言规范的一部分,因此通常在需要特定大小时直接使用大小变体。
Eiffel 标准没有定义基本类型的精确行为,即从语言的角度来看,它们被视为与任何其他类型一样。据我所知,所有实现都不会检查整数溢出或下溢,而是将结果以它们的大小取模。
有几种基于库的解决方案可提供任意精度整数运算:
FACTORIAL
表示大整数值BIG_INTEGER
带有一组其他数字类INTEGER_X
- 任意精度整数DECIMAL
以及MA_DECIMAL
分别 - 遵循通用十进制算术规范的十进制数