bc
(Basic Calculator)是一个在类 Unix 系统中常用的任意精度计算器语言。它不仅能够执行简单的数学运算,还支持变量、数组、用户自定义函数以及基本的编程结构如条件语句和循环。这使得bc
不仅可以作为一个命令行计算器使用,还可以编写复杂的数学计算脚本。
1. 基本语法:
bc [选项]... [文件...]
2. 核心功能与选项
2.1 常用选项
选项 |
功能 |
适用场景 |
-l , --mathlib |
加载标准数学库(提供 sqrt 、sin 、cos 等函数)。 |
需要高级数学运算时。 |
-q , --quiet |
禁用启动时的欢迎信息。 |
需要静默执行脚本时。 |
-v , --version |
显示版本信息并退出。 |
需要确认工具版本时。 |
-i , --interactive |
强制进入交互模式。 |
需要交互式计算时。 |
-w , --warn |
警告非 POSIX 扩展的语法。 |
检查代码兼容性时。 |
-s , --standard |
严格遵循 POSIX 标准,禁用扩展功能。 |
需要符合 POSIX 标准时。 |
3. 数字与变量
3.1 数字类型
- 任意精度:支持整数、浮点数,精度由
scale
变量控制。
- 进制转换:
ibase=N
:设置输入基数(2~16)。
obase=N
:设置输出基数(2~任意)。
- 示例:
obase=2; ibase=10; 192
3.2 变量与特殊变量
- 简单变量:
var = expression
。
- 数组变量:
array[expr] = expression
。
- 特殊变量:
scale
:控制运算精度(默认 0)。
ibase
:输入基数(默认 10)。
obase
:输出基数(默认 10)。
last
:保存上一次输出的结果(扩展功能)。
4. 表达式与运算符
4.1 算术运算符
运算符 |
说明 |
+ , - , * , / |
加、减、乘、除。 |
% |
取余(结果与被除数符号一致)。 |
^ |
幂运算(指数必须为整数)。 |
() |
改变运算优先级。 |
4.2 关系与布尔运算
- 关系运算符:
<
, <=
, >
, >=
, ==
, !=
,结果为 0
(假)或 1
(真)。
- 布尔运算符(扩展功能):
!expr
:逻辑非。
expr && expr
:逻辑与。
expr || expr
:逻辑或。
4.3 赋值运算符
var = expr
:直接赋值。
var op= expr
:复合赋值(如 +=
, *=
等)。
5. 控制结构
5.1 条件语句
if (条件表达式) {
语句1;
} else {
语句2;
}
5.2 循环语句
5.3 函数定义
define function_name(parameters) {
语句;
return 返回值;
}
6. 数学库(需 -l
选项)
加载数学库后,可用以下函数:
函数 |
说明 |
示例 |
sqrt(x) |
平方根 |
sqrt(9) → 3 |
length(x) |
数字长度(十进制位数) |
length(123) → 3 |
scale(x) |
小数位数 |
scale(1.23) → 2 |
s(x) |
正弦(x 为弧度) |
s(0) → 0 |
c(x) |
余弦 |
c(0) → 1 |
e(x) |
指数函数(e^x) |
e(1) → 2.71828... |
7. 输入输出与文件
- 从文件读取:
bc script.bc
。
- 标准输入交互:直接输入表达式后按回车执行。
- 管道使用:在脚本中结合
echo
或其他命令:echo "scale=2; 1/3" | bc
8. 示例
8.1 基本计算
echo "3 + 2" | bc
echo "a=5; b=3; a*b" | bc
echo "scale=2; 10 / 3" | bc -l
echo "scale=10; 4*a(1)" | bc -l
echo "scale=2; r=5/1200; p=300000; n=360; p*r*(1+r)^n/((1+r)^n-1)" | bc -l
$ bc
bc 1.07
...
print 3 + 5 * 2
13
scale=2; 10 / 3
3.33
8.2 进制转换
echo "obase=16; 255" | bc
echo "ibase=2; 1010" | bc
输出:10
echo "obase=2; ibase=8; 37" | bc
输出:11111
8.3 使用数学库
$ bc -l
sqrt(2)
1.41421356237309504880
s(4*a(1))
1.0