数字与进制
十进制、分组、科学计数和紧凑字面量,快速运算符,以及精确的整数进制(十六进制、二进制、八进制)。
Numlex 接受人们书写数字的方式——千位分组、科学记数法、1.5M 之类的紧凑后缀——也接受
精确整数形式 0x、0b 和 0o。
本页说明字面量形式本身、值得了解的紧凑后缀歧义(5m 是五百万,不是五米)、可选的快速
运算符、带显示和溢出规则的整数进制,以及完整的示例集合。
十进制字面量
- 小数分隔符是
.或,,取决于区域格式——参见 数字格式与结果显示。 - 输入中的千位分隔符会被规范化:
1,234→1234、1 234(取决于格式)。函数调用内 的逗号可以改为分隔参数——参见 内置函数。 - 科学记数法:
1.5e6、2E-3。 - 运算符两侧的空格任意;括号
( )分组;允许一元+和-。
紧凑后缀
紧凑后缀紧跟数字、没有空格,适用于标量和货币金额:
| 后缀 | 系数 | 示例 |
|---|---|---|
k / K | ×10³ | 1.5k = 1,500;$2.5k = $2,500 |
m / M | ×10⁶ | 1.5M = 1,500,000;$2.5M = $2,500,000 |
有两点值得注意:
5m是 5,000,000,不是五米。 米需要空格:5 m。G、T和P不是标量或货币后缀。1.5G会把字母G作为未知单词划掉并返回 1.5。吉咖和太拉只作为带空格的目录单位名称存在:2 Gm、2 Gb、2 Gbyte。
快速运算符(设置)
启用 Quick operators 设置后,四个字母只在两个数字之间充当运算符——在标识符 内部绝不生效:
| 字母 | 运算符 |
|---|---|
p | + |
m | − |
x | × |
d | ÷ |
字面量 0x… 绝不会变成乘法。
整数进制(精确)
进制字面量使用严格前缀;前缀大小写无关(0X、0B、0O 均可用):
| 前缀 | 进制 | 数字 |
|---|---|---|
0x | 16 | 0-9 A-F |
0b | 2 | 0 1 |
0o | 8 | 0-7 |
规则:
- 下划线只能位于两个数字之间:
0x1_0、100_000。双下划线、边缘下划线或紧跟前缀 的下划线都是错误(0x_1F、0x1F_)。 - 符号-数值表示:
-0x10= −16。任何进制下字面量数值上限为0x7FFFFFFFFFFFFFFF(9223372036854775807):-0x7FFFFFFFFFFFFFFF可接受,而-0x8000000000000000和0x8000000000000000超出精确整数上限,是错误。数字溢出 (0x10000000000000000)也是错误。 - 显示: 非负结果显示为表达式的进制(
0x1F + 1→0x20)。负结果和精确整数范围之外的 运算(带余数的除法、负指数的^)显示为十进制(-0x10→ −16)。 - 普通十进制数字串不是精确整数。
9223372036854775808变为9.22e18。 精确整数处理只适用于进制字面量、int/bin/oct/hex函数以及as/in/to base短语进入。
进制名称与短语
进制名称不区分大小写:
| 名称 | 进制 |
|---|---|
decimal、base10 | 10 |
binary、base2 | 2 |
octal、base8 | 8 |
hex、hexadecimal、base16 | 16 |
base 2 / base 8 / base 10 / base 16(空格分隔的整数) | 2 / 8 / 10 / 16 |
<expr> as <base name> 255 as hex → 0xFF
<expr> in <base name> 99 in binary → 0b1100011
<expr> to base 8 64 to base 8 → 0o100
按位运算
精确整数模式由 0x/0b/0o 字面量、int(/bin(/oct(/hex( 调用、
… as|in <base> 和 … to base N 短语,以及按位符号 & | << >> 或单词 xor
激活(符号只在行含数学内容时计数——fish & chips 仍是普通文本)。
and/or 仅当两侧都是整数时才作为按位运算符。
| 运算 | 含义 | 说明 |
|---|---|---|
& | 按位与 | |
| | 按位或 | 符号始终按位:布尔操作数是错误(false | (1/0 > 0)) |
xor | 按位异或(单词) | 6 xor 3 = 5 |
<< | 左移 | 移位 0…63;溢出是错误 |
>> | 右移 | 移位 0…63;对负数采用算术移位 |
/ | 整数除法 | 有余数时结果为十进制数 |
% | 取余 | |
^ | 乘方 | 指数受检;负指数产生十进制数 |
这里的所有值都是精确整数:0x7FFFFFFFFFFFFFFF = 9223372036854775807,溢出是可见
错误——绝不是回绕,也绝不是静默舍入的数。单词 and/or/xor 是上下文的:两个整数
使它们按位,两个布尔值使 and/or 逻辑,而在同一运算符中混用类型是严格错误。请在
边界使用显式括号。
完整的运算符优先级见运算符与逻辑。
示例
0x1F + 1 → 0x20
0x1F in decimal → 31
0b101101 + 1 → 0b101110
0o55 + 1 → 0o56
0x1_0 → 0x10
100_000 as hex → 0x186A0
256 as hex → 0x100
16 in binary → 0b10000
-0x10 → -16
1 << 4 → 16
32 >> 2 → 8
0xFF & 0x0F → 0x0F
5 | 2 → 7
6 xor 3 → 5
5 << 3 → 40
(5 << 3) / 2 → 20
x = 0x1F
x & 1 → 1
x + 1 → 0x20
x as hex → 0x1F
最后四行在同一个表格中运行,x 只声明一次。