值¶
WebAssembly 程序操作基本数值值。此外,在程序的定义中,不可变的值序列用于表示更复杂的数据,例如文本字符串或其他向量。
字节¶
最简单的值形式是原始的未解释字节。在抽象语法中,它们表示为十六进制字面量。
约定¶
元变量 \(b\) 表示字节。
字节有时被解释为自然数 \(n < 256\)。
整数¶
不同类别的整数具有不同的值范围,这些范围由它们的位宽 \(N\) 和它们是无符号还是有符号来区分。
类 \(\href{../syntax/values.html#syntax-int}{\mathit{i}N}\) 定义了未解释的整数,其有符号性解释可能根据上下文而异。在抽象语法中,它们表示为无符号值。但是,某些操作 转换 它们为有符号值,基于二进制补码的解释。
注意
本规范中出现的主要整数类型是 \(\href{../syntax/values.html#syntax-int}{\mathit{u32}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{u64}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{s32}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{s64}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{i8}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{i16}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{i32}}\)、\(\href{../syntax/values.html#syntax-int}{\mathit{i64}}\)。但是,其他大小作为辅助结构出现,例如在 浮点数 的定义中。
约定¶
元变量 \(m, n, i\) 表示整数。
数字可以用简单的算术表示,如上语法所示。为了区分像 \(2^N\) 这样的算术运算和像 \((1)^N\) 这样的序列,后者用括号区分。
浮点数¶
浮点数数据表示 32 位或 64 位值,这些值对应于 IEEE 754 标准(第 3.3 节)的相应二进制格式。
每个值都有一个符号和一个幅度。幅度可以表示为形式为 \(m_0.m_1m_2\dots m_M \cdot2^e\) 的正常数,其中 \(e\) 是指数,\(m\) 是尾数,其最高有效位 \(m_0\) 为 \(1\),或者表示为非规格化数,其中指数固定为最小可能的值,\(m_0\) 为 \(0\);非规格化数中包括正零和负零值。由于尾数是二进制值,因此正常数表示为 \((1 + m\cdot 2^{-M}) \cdot 2^e\) 的形式,其中 \(M\) 是 \(m\) 的位宽;非规格化数类似。
可能的幅度还包括特殊值 \(\infty\)(无穷大)和 \(\href{../syntax/values.html#syntax-float}{\mathsf{nan}}\)(NaN,非数字)。NaN 值具有一个有效载荷,描述基础 二进制表示 中的尾数位。不区分信号 NaN 和静默 NaN。
其中 \(M = \href{../syntax/values.html#aux-significand}{\mathrm{signif}}(N)\) 和 \(E = \href{../syntax/values.html#aux-exponent}{\mathrm{expon}}(N)\),并且
规范 NaN 是一个浮点数 \(\pm\href{../syntax/values.html#syntax-float}{\mathsf{nan}}(\href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N)\),其中 \(\href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N\) 是一个有效载荷,其最高有效位为 \(1\),而其他位均为 \(0\)
算术 NaN 是一个浮点数 \(\pm\href{../syntax/values.html#syntax-float}{\mathsf{nan}}(n)\),其中 \(n \geq \href{../syntax/values.html#aux-canon}{\mathrm{canon}}_N\),使得最高有效位为 \(1\),而其他位是任意的。
注意
在抽象语法中,非规格化数由尾数的开头 0 区分。非规格化数的指数与正常数的最小可能指数具有相同的值。只有在 二进制表示 中,非规格化数的指数的编码方式才与任何正常数的指数不同。
此处定义的规范 NaN 概念与 IEEE 754 标准(第 3.5.2 节)为十进制交换格式定义的规范 NaN 概念无关。
约定¶
元变量 \(z\) 表示浮点数,在上下文中明确。
向量¶
数值向量是 128 位值,由向量指令(也称为SIMD 指令,单指令多数据)处理。它们在抽象语法中使用 \(\href{../syntax/values.html#syntax-int}{\mathit{i128}}\) 表示。通道类型(整数 或 浮点数)和通道大小的解释由操作它们的特定指令确定。
名称¶
名称是字符序列,这些字符是 Unicode(第 2.4 节)定义的标量值。
由于 二进制格式 的限制,名称的长度受其 UTF-8 编码长度的限制。
约定¶
字符(Unicode 标量值)有时与自然数 \(n < 1114112\) 交换使用。