最近经常要在linux下做一些进制转换,看到了可以使用bc命令,如下:

echo "obase=10;ibase=16;CFFF" | bc

用完以后就对bc进行了进一步的了解, man bc里面有详细的使用说明。

1.是什么,怎么用

bc - An arbitrary precision calculator language   一个任意精度的计算器语言。

从他的使用上来看,能够对计算公式的语法进行解释并返回出结果。有下面几种使用方式:

1).交互式

输入bc,进入交互式界面,然后输入3+1,回车后在下一行打印出了4

2).echo+管道

echo "3+1" | bc 返回4到屏幕上

3).bc + 文件名

bc "calc.txt"   进入bc交互式界面并自动返回文本内算式的结果

当算术或者语法等出现错误时,程序会返回错误信息,如下:

1/0
Runtime error (func=(main), adr=3): Divide by zero

2.选项  

--help  -h 显示选项页

--interactive -i 使用交互模式

--mathlib  -l 执行指定语句前,先加载math函数库

--warn  -w 对非POSIX的bc指令给出警告

--standard  -s 启动POSIX模式下的bc程序

--quiet  -q 不显示GNU bc 的欢迎
--version  -v 显示版本信息

3.数字、变量、表达式和注释

3.1数字

  操作基本都是围绕数字,默认的输出输入进制都是十进制。数字有2个属性 长度(length)和小数点后精度(scale), length值数字有效数字的长度,scale是值小数点后的长度。

如:0.001 length=3 scale=3

45.78 length=4 scale=2

  关于数字,当使用十六进制时,英文ABCDEF必须大写,大于16进制的则都用XX的十进制数字代表一位,如C=12

3.2 变量

  计算表达式的时候可以用变量,变量名为小写字母开头后面可以跟_,1,a。

变量分两种:

普通变量: a=4;a   返回4

数组变量: a[1]=1;a[3]=3;a[1];a[2];a[3]  返回1 0 3

  另外有4个特殊的变量,他们有着特殊的意义,不能当做普通变量用,如下:

1)scale=10; 设置之后的scale为10,默认为0(及整数除法会返回整数)

2)obase=16;ibase=16; 设置输入和输出都为16进制,默认值为10

注意:为10时可不设置ibase obase的值,obase要尽量放在ibase前,因为ibase设置后,后面的数字都是以ibase的进制来换算的

3)last,是指上一次返回出来的数字

3.3 表达式

  表达式跟C语言的都类似,主要就是

1)运算类 + - * / % ++ -- ^等

2)赋值类 = +=

3)关系类 > <=  其中true则返回1,false返回0

4)布尔类 && || 同上

注: a = 3 < 5 ,C语言中a=false,而bc中a=3,然后返回3<5的结果1      故一般带赋值的算式后面尽量都要加括号来确保执行顺序

  几个特殊的表达式:

length(3.5)   取length

scale(3.5)  取scale

sqrt(9)   取根号

read()  从标准输入读

3.4 注释

注释有两种:

1)多行注释 /* */

2)单行注释#

4. 语句(statement) 和 函数

4.1语句

1+1

2+2

等价于1+1;2+2,都会返回两行 2  4 。

但是给变量赋值是不会输出值得,故1+1;2+2;a=3;b=4 还是返回两行2 4。

故:分隔符是 分号或者回车,纯赋值不会产生输出,表达式会以obase进制输出到标准输出

a=1 无输出    (a=1)会输出1,因为()是表达式

1)输出可以用print, 如print a,b,c,d

2)可使用字符串 "abc\n"

3)其他的话跟C类似 if for while return break continue {}

4.2 函数

define [可选void] 函数名(参数列表[如:a, b, array[]]) {

  auto m,n,l;

.... return 45;

}

auto 声明的是局部变量,数组参数用array[]表示,返回值写了void的就不会打印最终返回值,如下

1               define py (y) { print "--->", y, "<---", "0; }
2               define void px (x) { print "--->", x, "<---", "0; }
3               py(1)
4               --->1<---
5               0
6               px(1)
7               --->1<---

还有一些数学库,如s(1), c(1),l(1)等,需要bc -l 在启动时导入数学库,此时默认的scale=20

如输出派 π :echo "4*a(1)" | bc -l    注a(1)表示arctan反正切函数

函数的一个例子:

 1               /* Uses the fact that e^x = (e^(x/2))^2
 2                  When x is small enough, we use the series:
 3                    e^x = 1 + x + x^2/2! + x^3/3! + ...
 4               */
 5
 6               define e(x) {
 7                 auto  a, d, e, f, i, m, v, z
 8
 9                 /* Check the sign of x. */
10                 if (x<0) {
11                   m = 1
12                   x = -x
13                 }
14
15                 /* Precondition x. */
16                 z = scale;
17                 scale = 4 + z + .44*x;
18                 while (x > 1) {
19                   f += 1;
20                   x /= 2;
21                 }
22
23                 /* Initialize the variables. */
24                 v = 1+x
25                 a = x
26                 d = 1
27
28                 for (i=2; 1; i++) {
29                   e = (a *= x) / (d *= i)
30                   if (e == 0) {
31                     if (f>0) while (f--)  v = v*v;
32                     scale = z
33                     if (m) return (1/v);
34                     return (v/1);
35                   }
36                   v += e
37                 }
38               }

5.其他

man bc最后还介绍了一下全局limits,环境变量,版本对比等,这里不累述,有兴趣直接里面看吧。

6.其他一些计算命令

1)dc  指令复杂些,更像是老式计算器

2)expr 如expr 3 + 4  主要是后面每个数字符号之间都得加空格

3)echo 如echo $((3+4)) echo $((16#CC)) 主要是多加()让他产生计算的意义

4)awk 如'BEGIN{a=3+2;print a}'

小结:

  bc是一个较为完整,提供了完备的类似C的编程语法的计算器,可以在交互式界面、文本或管道的方式方便的进行一些逻辑运算。支持多进制转换,任意精度调整,打印控制,函数支持,逻辑控制等。有疑惑的地方直接man bc即可有详细的解释。

转载于:https://www.cnblogs.com/vanishfan/p/4359296.html

【原创】linux命令bc使用详解相关推荐

  1. linux之bc命令使用详解_【原创】linux命令bc使用详解

    最近经常要在linux下做一些进制转换,看到了可以使用bc命令,如下: echo "obase=10;ibase=16;CFFF" | bc 用完以后就对bc进行了进一步的了解,  ...

  2. linux中top工具,Linux命令工具 top详解

    Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...

  3. 【转】Linux命令工具 top详解

    Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...

  4. linux su命令位置,Linux命令大全su详解

    su允许某用户暂时成为另一个用户.它以真实有效的user ID.group ID和给定USER的附加组,执行一个命令,通常是一个交互式的shell.接下来是小编为大家收集的Linux命令大全su详解, ...

  5. Linux命令工具 top详解

    Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似 于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来 ...

  6. 离线调用linux命令,GitHub - rinetd/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  7. 实验楼linux命令,GitHub - encorechow/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  8. spark常用的linux命令,GitHub - Sparkinzy/linux-command: Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。...

    Linux Command 516 个 Linux 命令大全,内容包含 Linux 命令手册.详解.学习,值得收藏的 Linux 命令速查手册.请原谅我写了个爬虫,爬了他们家的数据linuxde.ne ...

  9. linux命令之-dmesg详解

    Linux命令dmesg用法详解 功能说明:显示开机信息.  语 法:dmesg [-cn][-s <缓冲区大小>]  补充说明:kernel会将开机信息存储在ring buffer中.您 ...

最新文章

  1. 技巧:结合Zabbix与SNMP监控嵌入式设备
  2. ScheduleThreadPoolExecutor的工作原理与使用示例
  3. 初学PX4之飞控算法
  4. 小心多任务设计被滥用
  5. windows下的NTP服务
  6. 软件测试——Junit的使用
  7. python函数定义语句可执行_python学习笔记-定义函数
  8. 用Julia学习微积分:这有一份高赞数学教程 | 附习题+代码
  9. 计算机专业英语课后答案北京理工大学,计算机专业英语
  10. vue是否可以做行车轨迹_特斯拉-概念自行车,是否可以走进大众生活
  11. 任正非谈鸿蒙系统研究,任正非谈鸿蒙系统 有优势 有信心打造生态
  12. Python | 类和对象
  13. (转)DB2下载地址总结
  14. ie7/8卸载工具 降级到IE6
  15. 【译】雄迈摄像头爆出Mirai僵尸网络
  16. 右下角弹窗 html 怎么写,右下角弹窗广告.html
  17. 设置Solidworks为Ansys Workbench进行参数化设计作准备
  18. STM32基础12--数模转换(DAC)
  19. 关于高维空间的一些思考
  20. 如何实现 “中间这几个字要加粗,但是不要太粗,比较纤细的那种粗” ?

热门文章

  1. 伍六七带你学算法 进阶篇-生命游戏
  2. VScode的撤销操作的快捷键
  3. 2022-2028年中国毛纺行业研究及前瞻分析报告
  4. 2022-2028年中国汽车塑料行业市场深度分析及投资趋势预测报告
  5. 虚拟机网络连接方式linuxcentos
  6. PyTorch里面的torch.nn.Parameter()
  7. npm install 提示权限不足 Error: EPERM: operation not permitted, unlink XXX
  8. LeetCode简单题之删除排序链表中的重复元素
  9. Docsify个人网站搭建详细教程
  10. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)