1.命令简介

bc(Binary Calculator)命令用于任意精度的计算,语法类似于 C 语言。Bash 内置了对整数四则运算的支持,但是并不支持浮点运算,而 bc 命令可以很方便地进行浮点运算和整数运算。

本文描述的 GNU 版本超出了传统 bc 的实现和 POSIX 标准。在使用扩展功能时,可以使用命令行选项打印警告或拒绝使用。

2.命令格式

bc [ -hlwsqv ] [long-options] [ file ... ]

3.选项说明

-h, --help显示帮助信息并退出
-i, --interactive强制进入交互式模式
-l, --mathlib定义使用的标准数学库
-w, --warn对 POSIX bc 的扩展给出警告信息
-s, --standard完全使用 POSIX 版本的 bc 功能
-q, --quiet不打印正常的 GNU bc 环境信息
-v, --version打印 bc 版本与版权后退出

4.特殊变量

bc 在运算过程中将数值存储在两种类型的变量中,简单变量和数组。两种变量均使用字母开头后跟字母、数字或下划线的命名方式且全部小写。其中有四个特殊变量:

scale    定义某些操作如何使用小数点后的数字,默认值为 0
ibase   定义输入数的基数,默认为十进制数
obase   定义输出数的基数,默认为十进制数
last    表示最后的输出值

5.注释

bc 中的块注释使用/* */,行注释使用 #。

6.表达式

表达式的输入值可以是 2 到 16 进制的数值,数值的基数由特殊变量 ibase 决定。如果数值中包含字符 A-F,则必须使用大写,因为小写表示变量名。

在下面表达式的描述中,EXPR 指完整表达式,VAR 指简单变量或数组变量。简单变量只是一个名称,数组变量被指定为 NAME[EXPR]。

除非特别提到,结果的精度是表达式中最大的精度。

基本运算:
- EXPR相反数
++ VAR自增 1
-- VAR自减 1
VAR ++表达式的结果是变量的值,然后变量自增 1
VAR --表达式的结果是变量的值,然后变量自增 1
EXPR + EXPR两个表达式相加
EXPR - EXPR两个表达式相减
EXPR * EXPR两个表达式相乘
EXPR / EXPR两个表达式相除。结果的精度由特殊变量 scale 确定
EXPR % EXPR两个表达式取余
EXPR ^ EXPR取幂。第二个表达式 EXPR 必须是整数
( EXPR )这将更改标准优先级以强制执行表达式的计算
VAR = EXPR将表达式的结果赋给变量 VAR
VAR <OP>= EXPR这相当于 var = var EXPR关系运算:
EXPR1 < EXPR2
EXPR1 <= EXPR2
EXPR1 > EXPR2
EXPR1 >= EXPR2
EXPR1 == EXPR2
EXPR1 != EXPR2逻辑运算:
!EXPR
EXPR && EXPR
EXPR || EXPR

以上表达式涉及的运算符优先级由低到高依次为:

||           左结合
&&          左结合
!           非结合的
关系运算符   左结合
赋值运算符   由结合
+, -       左结合
*, /, %     左结合
^           右结合
取反运算符   非结合的
++, --        非结合的

以上运算符优先级与 C 语言有些出入,使用时需要注意。比如表达式 a = 3 < 5 在 C 语言中 a 的值为 0,在 bc 中,因为 = 的优先级高于 <,所以 a 的值为 3。

bc 中提供了一些特殊的表达式,这些与用户定义的函数和标准函数有关,下文函数一节将会详述。

7.语句

bc 的语句使用分号和换行符进行分隔,下面将介绍 bc 中常用的语句。注意,中括号 [] 中的内容是可选的。

EXPRESSION表达式分为赋值表达式与非赋值表达式,如果表达式不是赋值语句,则计算表达式并将其结果打印到输出
STRING使用双引号包围的内容被视为字符串。字符串可以包含特殊字符,使用反斜杠表示,\a 响铃,\b 退格,\f 换页,\n 换行,\r 回车,\q 双引号,\t 制表符,\\ 反斜杠
print LIST使用 print 语句进行输出。LIST 是逗号分隔的字符串或者表达式
{ STATEMENT_LIST }这是个复合语句,它允许将多个语句组合在一起执行
if ( EXPRESSION ) STATEMENT1 [else STATEMENT2]if 条件语句。如果表达式 EXPRESSION 结果非 0,则执行语句 STATEMENT1,否则执行 STATEMENT2
while ( EXPRESSION ) STATEMENTwhile 循环语句。如果表达式 EXPRESSION 结果非 0,则循环执行语句
for ( [EXPRESSION1] ; [EXPRESSION2] ; [EXPRESSION3] ) STATEMENTfor 循环语句
break用于退出最近一层的 while 或 for 循环
continue用于最近一层的 while 或 for 循环提前进入下一轮循环
halt结束 bc
return从函数中返回 0
return ( EXPRESSION )从函数返回表达式 EXPRESSION 的值
limits打印 bc 的限制
quit结束 bc
warranty打印授权注意事项

8.函数

bc 支持函数,定义形式如下:

define [void] NAME ( PARAMETERS ) {AUTO_LIST   STATEMENT_LIST }

其中 关键字 void 表示函数无返回值,NAME 为函数名,PARAMETERS 为函数参数,AUTO_LIST 为函数内部使用 auto 关键字申明的局部变量,STATEMENT_LIST 为函数 bc 语句。

函数调用形式:

NAME(PARAMETERS)

常用的内置函数有:

length ( EXPRESSION )数值的有效数字的个数
read ()从标准输入读取输入
scale ( EXPRESSION )数值小数点后的数字的个数
sqrt ( EXPRESSION )求平方根。如果 EXPRESSION 是一个负数,则引发运行时错误

如果使用 -l 选项调用 bc,则会预加载一个数学库,并将默认精度设置为 20。数学库定义了以下函数:

s (x)求正弦值 sin(x),x 的单位是弧度
c (x)求余弦值 cos(),x 的单位是弧度
a (x)x 的反正切,反正切返回弧度
l (x)x 的自然对数
e (x)指数函数,求自然 e 的 x 次幂
j (n,x)x 的整数阶 n 的贝塞尔函数

9.常用示例

(1)执行浮点运算。

echo "3.141592653 * 3" | bc
9.424777959

(2)指定计算结果的精度。

echo "scale = 2; 3.0/8" | bc
.37# 输出小数点前的 0
echo 'scale = 2; a = 3.0/8; if (length(a) == scale(a)) print 0; print a,"\n"' | bc
0.37

(3)进制转换。如将二进制转换为十进制。

echo "obase=10;ibase=2;00001111" | bc
15

(4)幂运算。

echo "9^2" | bc
81

(5)调用内置函数 sqrt() 计算平方根。

echo "sqrt(16)" | bc
4

(6)交互式进行数学运算。

bc
9+9
18
9*9
81
sqrt(81)
9
quit

参考文献

[1] bc manual
[2]【Linux】一步一步学Linux——bc命令(233)

Linux 命令(101)—— bc 命令相关推荐

  1. linux计算圆周率程序,科学网—[转载]关于Linux中使用bc命令计算圆周率(π):可以计算上千位或上万位,顺便评测CPU的计算能力 - 张成岗的博文...

    Posted on 2020-12-19 20:28  520_1351  阅读(149)  评论(0)  编辑  收藏 Linux系统中,我们可以安装bc计算器用来计算pi值(π圆周率) 在玩的同时 ...

  2. Linux命令之bc命令

    一.命令简介   bc是一种支持任意精度数字的语言,支持语句的交互式执行.在语法上与C编程语言有一些相似之处.通过命令行选项可以使用标准数学库.如果需要,将在处理任何文件之前定义数学库.bc首先按照列 ...

  3. Linux数学计算器—bc命令

    bc一款数学计算器 1.简介 bc命令是一种支持任意精度的交互执行的计算器语言.bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下. ...

  4. 【Linux】一步一步学Linux——bc命令(233)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 bc命令是一种支持任意精度的交互执行的计算器语言.bash ...

  5. 收藏 | Linux常用156个命令汇总!

    来源:机器学习算法与Python学习 本文约2500字,建议阅读5分钟. 本文为大家带来Linux系统中156个常用的命令. linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无 ...

  6. linux用计算器的命令,linux计算器命令

    linux 自带了2个命令可以支持做基本的数学计算,不想使用命令可以用python或其他 2个命令很好记,一个是dc 其实是表达式求值栈操作,另一个是bc,其实是一种解释性语言了,支持各种while ...

  7. Linux运维常用命令汇总

    线上查询及帮助命令 (2 个) man查看命令帮助,命令的词典,更复杂的还有 info,但不常用.  help查看 Linux 内置命令的帮助,比如 cd 命令. 文件和目录操作命令 (18 个) l ...

  8. linux 大数字 进制转换,Linux下用bc快速进行数字进制转换

    介绍如何在Linux下用bc命令进行快速的数字进制转换. 我想Windows里,数字进制转换最方便的就是自带的calc计算器,但是它原没有我们可爱的Linux方便.Linux下,我们在term里敲 几 ...

  9. linux bc命令全称,Linux bc 命令

    Linux bc 命令 bc 命令是任意精度计算器语言,通常在linux下当计算器用. 它类似基本的计算器, 使用这个计算器可以做基本的数学运算. 常用的运算: + 加法 - 减法 * 乘法 / 除法 ...

最新文章

  1. c# 因其保护级别而不可访问。只能处理公共类型。
  2. 自然语言处理太难?按这个方式走,就是砍瓜切菜!
  3. 谈谈NullableT的类型转换问题
  4. netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
  5. jqGrid细节备注—pager文字的设置,更改默认的提交方式
  6. npm install 报错 汇总_2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总...
  7. 如何修改SharePoint服务器场管理员帐户和密码
  8. can通道采样频率_CAN采样点设置为多少合适?设置不对会咋样?
  9. 超声波测距仪编程_超声波测距仪参考(含原理图程序)
  10. 数据预处理-数据变换-属性构造
  11. rocketmq 4.X 扩容思路
  12. 华为-RH5885 V3 远程KVM
  13. Bsie(鄙视IE)
  14. Udp通信 暑期学习笔记(三)
  15. 学习了Python大数据之后,将来主要做什么
  16. u-boot 设置mac 地址
  17. vb mysql 实例_VB与数据库的交互经典例子总结
  18. 小米手机电池校正_华为小米等安卓福音:超实用手机电池校正 解决电池虚标不耐用!...
  19. 计算机c盘空间被虚拟占满,C盘空间总是莫名其妙的满了,又不想重装系统,5招教你如何瘦身...
  20. 世界顶级公司的前端面试都问些什么

热门文章

  1. 一个价值$1.5万的 PS NOW 漏洞
  2. 犯罪分子正在将合法的云监控工具用作后门
  3. SQL SERVER 2008 恢复远程备份文件
  4. 界面控件包Essential Studio for Windows Forms 2017 v3发布丨附下载
  5. Django-----中间件Cookie
  6. 《Java安全编码标准》一导读
  7. 网络流24题 最小路径覆盖问题
  8. Linux Shell 编程笔记
  9. lucene索引并搜索mysql数据库[转]
  10. pku 2387 Til the Cows Come Home