| 分享时间 | 1小时20分钟前 |
| 最后更新 | 1小时20分钟前 |
| 修订版本 | 0 |
| 用户许可 | 只读,不可再分享 |
| Quicker版本 | 1.45.5 |
| 动作大小 | 49.7 KB |
| 最低Quicker版本 | 1.38.15 |
## 功能
| 分类 | 功能 | 示例 |
|------|------|------|
| 基本运算 | 加减乘除、整除、取余、幂 | `2+3`, `10//3`, `2**10` |
| 位运算 | 与、或、异或、取反、移位 | `5&3`, `8>>1`, `~0` |
| 变量赋值 | 基本赋值、复合赋值 | `a=1`, `a+=5`, `a*=2` |
| 数学函数 | 三角、对数、指数、取整 | `sin(PI)`, `lg(100)`, `sqrt(144)` |
| 字符串 | 拼接、属性、Base64 | `"Hi"+".upper`, `"Hi".base64` |
| 进制转换 | 输入/输出各进制 | `0xFF`, `255.bin`, `255.hex` |
| 角度转换 | 弧度/角度互转 | `rad(180)`, `deg(PI)` |
| 时间戳 | 当前时间、日期运算 | `@now`, `@today+#1d` |
| 时间段 | 时间长度运算 | `#1d2h3s`, `#1y+#6m` |
| 矩阵 | 创建、运算、分析 | `{1,2;3,4}`, `det(A)`, `inv(A)` |
| 常量 | PI、e | `PI`, `e` |
| x 乘号 | 未定义 x 时作乘号 | `3x4`, `3 x 4` |
## 交互
| 操作 | 说明 |
|------|------|
| 点击表达式 | 回填到输入框并全选,方便修改后重新计算 |
| 复制按钮 | 复制计算结果到剪贴板 |
| 标题栏拖拽 | 移动窗口位置 |
## 快捷键
| 功能 | 快捷键 |
|------|--------|
| 计算 | `Enter` |
| 关闭窗口 | `Escape` |
| 清空页面 | `Ctrl+K` |
## 运算符优先级(从低到高)
1. 赋值 `= += -= *= /= %=`
2. 时间单位转换 `> #unit`
3. 逻辑或 `or`
4. 逻辑与 `and`
5. 位或 `|`、位与 `&`
6. 位异或 `^`
7. 比较 `== != < > <= >=`
8. 移位 `<< >>`
9. 加减 `+ -`
10. 乘除 `* / // % **`
11. 一元 `- + ~ !`
12. 属性访问 `.bin .hex .T .det ...`
13. 基本表达式 `()` `[]` `{}` 函数调用 字面量
## 关键技巧
1. **x 乘号**:`3x4` 中 `x4` 被 tokenizer 读为标识符,ParseMul 特殊处理以 `x` 开头的标识符
2. **进制属性**:`.bin` `.hex` `.oct` 在 ParsePostfix 中处理,不依赖函数调用
3. **时间戳**:`@now` `@today` `@2024-1-1` 在 ParseTimestamp 中处理
4. **时间段**:`#1d2h3s` 在 ParseDuration 中解析各时间单位
5. **矩阵**:`[1,2,3]` 列向量、`{1,2;3,4}` 矩阵,分号分隔行
6. **点击回填**:表达式 TextBlock 注册 `MouseLeftButtonDown`,点击后将表达式文本回填到 InputBox 并 `SelectAll()` + `Focus()`,hover 时文字变亮 + 手形光标
## 测试清单
### 基本运算
- [x] `2+3` = 5
- [x] `2**10` = 1024
- [x] `10//3` = 3
- [x] `10%3` = 1
### 位运算
- [x] `5&3` = 1
- [x] `5|3` = 7
- [x] `5^3` = 6
- [x] `~0` = -1
- [x] `8>>1` = 4
- [x] `1<<3` = 8
### 数学函数
- [x] `sin(0)` = 0
- [x] `cos(0)` = 1
- [x] `sqrt(144)` = 12
- [x] `abs(-42)` = 42
- [x] `lg(100)` = 2
- [x] `pow(2,8)` = 256
### 变量
- [x] `a=10`, `b=20`, `a+b` = 30
- [x] `a+=5` = 15
### 字符串
- [x] `"Hello".base64` = SGVsbG8=
- [x] `"Hello".length` = 5
- [x] `"Hello".upper` = HELLO
### 进制转换
- [x] `0xFF` = 255
- [x] `255.bin` = 0b11111111
- [x] `255.hex` = 0xFF
### 矩阵
- [x] `[1,2,3]` 列向量
- [x] `{1,2,3}` 行向量
- [x] `eye(2)` 单位矩阵
- [x] `det({1,2;3,4})` = -2
### 时间
- [x] `#1d` = 86400000
- [x] `#1d+#2h` = 93600000
- [x] `@now` 返回当前时间戳
### x 乘号
- [x] `3x4` = 12
- [x] `3 x 4` = 12
| 修订版本 | 更新时间 | 更新说明 |
|---|---|---|
| 0 | 1小时20分钟前 |