Alp*_*ack 1 ocaml types integer
根据手册,OCaml 有 4 种整数文字:
\ninteger-literal ::= [-]\xe2\x80\x84(0\xe2\x80\xa69)\xe2\x80\x84{\xe2\x80\x840\xe2\x80\xa69\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84_\xe2\x80\x84}\n \xe2\x88\xa3 \xe2\x80\x84[-]\xe2\x80\x84(0x\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x840X)\xe2\x80\x84(0\xe2\x80\xa69\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84A\xe2\x80\xa6F\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84a\xe2\x80\xa6f) {\xe2\x80\x840\xe2\x80\xa69\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84A\xe2\x80\xa6F\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84a\xe2\x80\xa6f\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84_\xe2\x80\x84}\n \xe2\x88\xa3 \xe2\x80\x84[-]\xe2\x80\x84(0o\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x840O)\xe2\x80\x84(0\xe2\x80\xa67)\xe2\x80\x84{\xe2\x80\x840\xe2\x80\xa67\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84_\xe2\x80\x84}\n \xe2\x88\xa3 \xe2\x80\x84[-]\xe2\x80\x84(0b\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x840B)\xe2\x80\x84(0\xe2\x80\xa61)\xe2\x80\x84{\xe2\x80\x840\xe2\x80\xa61\xe2\x80\x84\xe2\x88\xa3\xe2\x80\x84_\xe2\x80\x84}\n \nint32-literal ::= \xe2\x80\x84integer-literal\xe2\x80\x84l\n \nint64-literal ::= \xe2\x80\x84integer-literal\xe2\x80\x84L\n \nnativeint-literal ::= \xe2\x80\x84integer-literal\xe2\x80\x84n\nRun Code Online (Sandbox Code Playgroud)\n检查这些文字的类型(使用 utop)给出以下结果:
\n123 : int123l : int32123L : int64123n : nativeintint32和 的含义很明显,但是和int64之间有什么区别,它们与显式大小的 32/64 位整数有何关系?intnativeint
手册和标准库文档的各个部分对此进行了解释:
\n整数:
\n\n\n整数值是从 \xe2\x88\x922 30到 2 30 \xe2\x88\x921的整数,即 \xe2\x88\x921073741824 到 1073741823。该实现可能支持更广泛的整数值:在 64 位平台上,当前实现支持范围从 \xe2\x88\x922 62到 2 62 \xe2\x88\x921 的整数。
\n
关于与 C 接口的手册部分也为此提供了一些有用的上下文:
\n\n\nvalue 类型的对象可以是:
\n\n
\n- 未装箱的整数;
\n- 或指向堆内块的指针,通过
\ncaml_alloc_*第 20.4.4 节中描述的函数之一进行分配。
\n\n整数值编码 63 位有符号整数(32 位架构上为 31 位)。它们未装箱(未分配)。
\n
由于使用一位来区分未装箱的整数和指针,因此常规ints 要么是 31 位值,要么是 63 位值。
\n\n\n32 位整数。
\n该模块提供对
\nint32有符号 32 位整数类型的操作。与内置int类型不同,该类型int32在所有平台上都保证为 32 位宽。所有算术运算int32均以 2 32为模。性能注意事项: 类型的值
\nint32比 类型的值占用更多的内存空间int,并且 上的算术运算int32通常比 上的算术运算慢int。int32仅当应用程序需要精确的 32 位算术时才使用。
\n\n\n64 位整数。
\n该模块提供对
\nint64有符号 64 位整数类型的操作。与内置int类型不同,该类型int64保证在所有平台上都是 64 位宽。int64 上的所有算术运算均以 2 64为模性能注意事项: 类型的值
\nint64比 类型的值占用更多的内存空间int,并且 上的算术运算int64通常比 上的算术运算慢int。int64仅当应用程序需要精确的 64 位算术时才使用。
\n\n处理器本机整数。
\n\n
nativeint该模块提供对有符号 32 位整数(在 32 位平台上)或有符号 64 位整数(在 64 位平台上)类型的操作。该整数类型与 C 编译器中的指针类型具有完全相同的宽度。根据架构的字大小,所有算术运算nativeint均以 2 32或 2 64为模。性能注意事项: type 的值
\nnativeint比 type 的值占用更多的内存空间int,并且算术运算nativeint通常比 int 慢。nativeint仅当应用程序需要比类型更高的精度时才使用int。
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |