calc 用法指南
版本:2.0 | 本文档通过场景化示例展示 calc 的全部功能
1. 入门
1.1 编译
bash
$ cd calc && make
1.2 批处理模式
bash
$ ./build/calc "(90-18)/3+15"
39
1.3 交互模式(REPL)
bash
$ ./build/calc
calc> (90-18)/3+15
90 - 18 = 72
72 / 3 = 24
24 + 15 = 39
result: 39
calc> exit
1.4 管道输入
bash
$ echo "3.14 * 2" | ./build/calc
6.28
1.5 查看版本和帮助
bash
$ ./build/calc --version
calc version 2.0
$ ./build/calc --help
2. 算术运算
2.1 四则运算
bash
$ ./build/calc "3 + 5"
8
$ ./build/calc "10 - 3"
7
$ ./build/calc "4 * 2"
8
$ ./build/calc "10 / 3"
3.33333
2.2 取模
bash
$ ./build/calc "10 % 3"
1
$ ./build/calc "10 % 3.5"
3
2.3 运算符优先级
乘除优先于加减:
bash
$ ./build/calc "3 + 5 * 2"
13
$ ./build/calc "10 / 2 + 3"
8
2.4 括号改变优先级
bash
$ ./build/calc "(3 + 5) * 2"
16
$ ./build/calc "((3 + 5) * 2)"
16
2.5 链式运算
bash
$ ./build/calc "1 + 2 + 3 + 4 + 5"
15
$ ./build/calc "10 - 3 - 2"
5
$ ./build/calc "100 / 5 / 2"
10
$ ./build/calc "10 * 2 / 5"
4
2.6 浮点运算
bash
$ ./build/calc "3.5 + 1.5"
5
$ ./build/calc ".5 * 2"
1
$ ./build/calc "3 / 2"
1.5
2.7 科学计数法
bash
$ ./build/calc "1e2"
100
$ ./build/calc "1e6 * 1e6"
1e+12
3. 数字格式
3.1 十进制
bash
$ ./build/calc "42"
42
3.2 十六进制
bash
$ ./build/calc "0xFF"
255
$ ./build/calc "0xff"
255
$ ./build/calc "0xFF & 0x0F"
15
3.3 八进制
bash
$ ./build/calc "0777"
511
3.4 二进制
bash
$ ./build/calc "0b1010"
10
4. 一元运算
4.1 负号
bash
$ ./build/calc "-5"
-5
$ ./build/calc "-5 + 3"
-2
4.2 双重负号
bash
$ ./build/calc "--5"
5
4.3 逻辑非
bash
$ ./build/calc "!true"
0
$ ./build/calc "!false"
1
$ ./build/calc "!0"
1
$ ./build/calc "!5"
0
4.4 按位取反
bash
$ ./build/calc "~0"
-1
$ ./build/calc "~5"
-6
$ ./build/calc "~-1"
0
5. 比较运算
5.1 相等/不等
bash
$ ./build/calc "3 == 3"
1
$ ./build/calc "3 != 3"
0
$ ./build/calc "3.0 == 3"
1
5.2 大小比较
bash
$ ./build/calc "3 < 5"
1
$ ./build/calc "3 > 5"
0
$ ./build/calc "3 <= 3"
1
$ ./build/calc "3 >= 5"
0
$ ./build/calc "5 > 3"
1
$ ./build/calc "5 >= 3"
1
5.3 比较与逻辑混合
bash
$ ./build/calc "1 < 2 && 2 < 3"
1
$ ./build/calc "3 + 5 == 8"
1
$ ./build/calc "3 + 5 * 2 == 13"
1
6. 逻辑运算
6.1 逻辑值
bash
$ ./build/calc "true"
1
$ ./build/calc "false"
0
6.2 逻辑与
bash
$ ./build/calc "true && true"
1
$ ./build/calc "true && false"
0
6.3 逻辑或
bash
$ ./build/calc "true || false"
1
$ ./build/calc "false || false"
0
6.4 混合优先级
&& 优先于 ||:
bash
$ ./build/calc "false || true && false"
0
$ ./build/calc "!true && false"
0
7. 位运算
7.1 按位与
bash
$ ./build/calc "3 & 6"
2
7.2 按位或
bash
$ ./build/calc "3 | 6"
7
7.3 按位异或
bash
$ ./build/calc "3 ^ 6"
5
$ ./build/calc "5 ^ 5"
0
7.4 移位
bash
$ ./build/calc "1 << 3"
8
$ ./build/calc "8 >> 2"
2
$ ./build/calc "0 << 3"
0
$ ./build/calc "0 >> 3"
0
7.5 混合优先级
位运算优先于比较,后于算术:
bash
$ ./build/calc "3 + 5 & 2"
0
$ ./build/calc "3 & 6 | 1"
3
$ ./build/calc "~0 >> 1"
-1
8. 变量系统
8.1 变量赋值
bash
$ ./build/calc "x = 5 + 3"
8
8.2 复合赋值
bash
$ ./build/calc "x = 5; x += 3; x"
8
$ ./build/calc "x = 10; x -= 3; x"
7
$ ./build/calc "x = 5; x *= 2; x"
10
$ ./build/calc "x = 10; x /= 2; x"
5
8.3 自增/自减
calc> x = 5
calc> ++x
6
calc> x++
6
calc> x
7
calc> --x
6
calc> x--
6
calc> x
5
8.4 查看变量
calc> vars
x = 5
y = 16
9. 条件表达式
9.1 基本条件
bash
$ ./build/calc "1 ? 2 : 3"
2
$ ./build/calc "0 ? 2 : 3"
3
9.2 条件与比较结合
bash
$ ./build/calc "1 < 2 ? 3 : 4"
3
$ ./build/calc "true ? 1 : 0"
1
$ ./build/calc "false ? 1 : 0"
0
9.3 嵌套条件
bash
$ ./build/calc "1 ? 2 : 3 ? 4 : 5"
2
$ ./build/calc "0 ? 1 : 2 ? 3 : 4"
3
10. 内置函数
10.1 三角函数
bash
$ ./build/calc "sin(0)"
0
$ ./build/calc "cos(0)"
1
$ ./build/calc "tan(0)"
0
$ ./build/calc "sin(3.14159 / 2)"
1
10.2 平方根和幂
bash
$ ./build/calc "sqrt(16)"
4
$ ./build/calc "pow(2, 10)"
1024
$ ./build/calc "sqrt(4) + 1"
3
10.3 取整和绝对值
bash
$ ./build/calc "floor(3.7)"
3
$ ./build/calc "ceil(3.2)"
4
$ ./build/calc "abs(-5)"
5
10.4 嵌套调用
bash
$ ./build/calc "sin(sqrt(4))"
0.909297
$ ./build/calc "atan2(1, 1)"
0.785398
11. 多表达式
11.1 分号分隔
bash
$ ./build/calc "1; 2; 3"
3
$ ./build/calc "1 + 1; 2 + 2; 3 + 3"
6
11.2 链式赋值
bash
$ ./build/calc "a = 5; b = 6; a + b"
11
$ ./build/calc "x = 1; x += 2; x * 3"
9
11.3 混合运算
bash
$ ./build/calc "true; false; true || false"
1
$ ./build/calc "3; 2; 1"
1
12. REPL 高级功能
12.1 历史记录
calc> 3 + 5
calc> 2 * 3
calc> history
#1 3 + 5
#2 2 * 3
calc> !1
>> 3 + 5
8
calc> !!
>> 3 + 5
8
12.2 进制输出
calc> dec
output base: dec
calc> 255
255
calc> hex
output base: hex
calc> 255
0xFF
calc> bin
output base: bin
calc> 255
0b11111111
calc> oct
output base: oct
calc> 255
0377
12.3 多行输入
当括号未闭合时自动提示续行:
calc> (3 + 5
...> ) * 2
3 + 5 = 8
8 * 2 = 16
result: 16
12.4 配置文件
创建 ~/.calcrc 文件,启动时自动加载:
# ~/.calcrc
PI = 3.141592653589793
E = 2.718281828459045
启动后可直接使用:
calc> PI
3.14159
calc> E
2.71828
13. 错误处理
13.1 非法字符
calc> 3 + @ 5
3 + @ 5
^
error: unexpected character at position 5
13.2 除零
bash
$ ./build/calc "3 / 0"
error: division by zero
13.3 未定义变量
bash
$ ./build/calc "z + 1"
error: undefined variable 'z'
13.4 未知函数
bash
$ ./build/calc "unknown()"
error: unknown function 'unknown'
13.5 结果溢出
bash
$ ./build/calc "1e5000 * 1e5000"
error: result overflow
13.6 错误恢复
分号分隔的表达式,前一个出错后继续执行后续:
calc> 1/0; 3 + 5
error: division by zero
3 + 5 = 8
result: 8
13.7 常见错误
| 错误用法 | 正确用法 | 说明 |
|---|---|---|
3++5 |
3+5 |
连续运算符非法 |
++5 |
--- | 前缀 ++ 需要变量 |
x++ |
--- | 后缀 ++ 需要先定义变量 |
1?2 |
1?2:3 |
条件表达式缺少 : |
3== |
3==5 |
比较运算符缺少右操作数 |
3& |
3&5 |
位运算符缺少右操作数 |
14. 实用技巧
14.1 常量折叠(缓存)
calc 自动缓存最近 16 个表达式的结果,相同表达式重复求值时直接返回:
bash
$ ./build/calc "3+5*2"
13
# 第二次求值直接从缓存读取
14.2 管道配合 printf
bash
$ printf 'x=5\ny=x*2\nx+y\nexit\n' | ./build/calc
14.3 注释
bash
$ ./build/calc "3 + 5 # 加法运算"
8
14.4 安装到系统
bash
$ make install
$ calc "3 + 5"
8
14.5 源码打包
bash
$ make dist
created calc-2.0.tar.gz