当前位置: 首页 > 编程日记 > 正文

【原创】linux命令bc使用详解

最近经常要在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

相关文章:

Java项目:学生信息管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a; 用户的登录注册&#xff0c;学生信息管理&#xff0c;教师信息管理&#xff0c;班级信 息管理&#xff0c;采用mvcx项目架构&#xff0c;覆盖增删改查&#xff0c;包括学…

MVC學習網站

http://www.cnblogs.com/haogj/archive/2011/11/23/2246032.html

数据导出Excel表格

public String exportInfoFr(String path,String name,String startdate,String enddate,SysUser user){List<Map<String, Object>> list this.esEntPermitErrDao.findListObjectBySql("select 字段值1,字段值2,字段值3,字段值4,字段值5 from 表名 where 字段…

Rocksdb 通过posix_advise 让内核减少在page_cache的预读

文章目录1. 问题排查确认I/O完全/大多数来自于rocksdb确认此时系统只使用了rocksdb的Get来读确认每次系统调用下发读的请求大小确认是否在内核发生了预读2. 问题原因内核预读机制page_cache_sync_readaheadondemand_readahead3. 优化事情起源于 组内的分布式kv 系统使用rocksdb…

[leetcode] Minimum Path Sum

Minimum Path Sum Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time.分析&#xff1a;动态规划…

Java项目:在线小说阅读系统(读者+作者+管理员)(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a; 1:用户及主要操作功能 游客可以浏览网站的主页&#xff0c;登陆注册&#xff0c;小说湿度&#xff0c;下单购 买&#xff0c;订单查询&#xff0c;个人信息查询&#xf…

游戏中的脚本语言

本文最初发表于《游戏创造》(http://www.chinagcn.com)2007年8月刊。版权所有&#xff0c;侵权必究。如蒙转载&#xff0c;必须保留本声明&#xff0c;和作者署名&#xff1b;不得用于商业用途&#xff0c;必须保证全文完整。网络版首次发表于恋花蝶的博客(http://blog.csdn.ne…

mvn项目中的pom文件提示Error parsing lifecycle processing instructions解决

清空.m2/repository下的所有依赖文件&#xff0c;重新下载即可解决该问题。 如果本地用户下没有.m2/repository 目录&#xff0c;找到如下mvn 指定的repository&#xff0c;进去之后清空所有文件。 转载于:https://www.cnblogs.com/Hackerman/p/10736498.html

blktrace 工具集使用 及其实现原理

文章目录工具使用原理分析内核I/O栈blktrace 代码做的事情内核调用 ioctl 做的事情BLKTRACESETUPBLKTRACESTOPBLKTRACETEARDOWN内核 调用blk_register_tracepoints 之后做的事情参考最近使用blktrace 工具集来分析I/O 在磁盘上的一些瓶颈问题&#xff0c;特此做一个简单的记录。…

Java项目:教材管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a; 管理员可以增删改查教材、教材商、入库教材、用户(用 户包括学生和教师)可以对教材商、教材进行。xcel的导入 导出操作。教U阿以领取入库的教材&#xff0c;可以退还教材…

mysql更改数据文件目录及my.ini位置| MySQL命令详解

需求&#xff1a;更改mysql数据数据文件目录及my.ini位置。 步骤&#xff1a; 1、查找my.ini位置&#xff0c;可通过windows服务所对应mysql启动项&#xff0c;查看其对应属性->可执行文件路径&#xff0c;获取my.ini路径。 "D:\MySQL\MySQL Server 5.5\bin\mysqld&quo…

私有云管理-Windows Azure Pack

今天是2014年的第一天&#xff0c;今年的第一篇博客关于私有云&#xff0c;而我在2014年的主要目标也是针对私有云。随着Windows Azure在中国的落地&#xff0c;大家逐渐的熟悉了在Windows Azure中的云体验。而微软针对私有云、混合云推出了一个管理自助门户&#xff0c;Window…

面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维

1 面向对象 1.1 你是如何认识新事物的&#xff1f; 从过往的事物中总结事物的特点(特征)&#xff0c;并比对新事物&#xff0c;把新事物进行归类。 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述。 理解: [1] 类包含了两个要素:特性和行为 > 同一类…

cannot find main module 解决办法

做6.824 实验的过程中想要跑测试&#xff0c;发现go test -run 2A时 出现cannot find main module问题&#xff0c;测试跑不起来。 原因 这个原因是从GO1.11 版本开始引入了go.mod文件来对项目中的go源码的编译相关的内容进行管理&#xff0c;经常使用GO的同学可能深受go get…

Java项目:网上选课系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a; 系统分为三个角色。最高权限管理员&#xff0c;学生&#xff0c;教师&#xff0c;包括 学生管理&#xff0c;教师管理&#xff0c;课程管理&#xff0c;选课&#xff0c;退课…

C#中类的继承 override virtual new的作用以及代码分析

继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法&#xff1b; override 子类中必须显示声明该方法是重写的父类中的方法&#xff1b; new 子类中忽略父类的已存在的方法&#xff0c;“重写该方法“&#xff1b; C#中不支…

spring手动代码控制事务

为什么80%的码农都做不了架构师&#xff1f;>>> DataSourceTransactionManager tran new DataSourceTransactionManager(vjdbcTemplate.getDataSource());DefaultTransactionDefinition def new DefaultTransactionDefinition();//事务定义类def.setPropagationB…

tar命令-压缩,解压缩文件

tar&#xff1a; -c: 建立压缩档案 -x&#xff1a;解压 -t&#xff1a;查看内容 -r&#xff1a;向压缩归档文件末尾追加文件 -u&#xff1a;更新原压缩包中的文件 上面五个参数是独立的&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和下面的命令连用但只能用其中一个。…

MIT 6.824 Lab2A (raft) -- Leader Election

文章目录实验要求Leader Election流程 及详细实现介绍基本角色关键超时变量关键的两个RPC实现RequestVote RPCAppendEntries RPCGo并发编程实现leader election调度本节记录的是完成MIT6.824 raft lab的leader Election部分实验。代码: https://github.com/BaronStack/MIT-6.82…

Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统主要实现的功能有&#xff1a; 学生以及老师的注册登录&#xff0c;在线考试&#xff0c;错题查询&#xff0c;学生管理&#xff0c;问题管理&#xff0c;错题管理&#xff0c;错题查询…

写给自己的web开发资源

web开发给我的感觉就是乱七八糟&#xff0c;而且要学习感觉总是会有东西要学习&#xff0c;很乱很杂我也没空搞&#xff0c;&#xff08;其实学习这个的方法就是去用它&#xff0c;什么你直接用&#xff1f;学过js么学过jquery么&#xff1f;哈哈&#xff0c;我没有系统的看完过…

虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”的解决方法

虚拟机VMWare“提示&#xff1a;软件虚拟化与此平台上的长模式不兼容”不少童鞋反映&#xff0c;在使用Windows7 64位操作系统时&#xff0c;无法运行VMWare或MS Virtual server等软件虚拟操作系统。提示为“提示&#xff1a;软件虚拟化与此平台上的长模式不兼容. 禁用长模式. …

如何在Vue项目中使用vw实现移动端适配(转)

有关于移动端的适配布局一直以来都是众说纷纭&#xff0c;对应的解决方案也是有很多种。在《使用Flexible实现手淘H5页面的终端适配》提出了Flexible的布局方案&#xff0c;随着viewport单位越来越受到众多浏览器的支持&#xff0c;因此在《再聊移动端页面的适配》一文中提出了…

Jsoncpp 在C++开发中的一些使用记录

jsoncpp 是一个C 语言实现的json库&#xff0c;非常方便得支持C得各种数据类型到json 以及 json到各种数据类型的转化。 一个json 类型的数据如下&#xff1a; {"code" : 10.01,"files" : "","msg" : "","uploadid&q…

Java项目:图书管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括(管理员和学生角色)&#xff1a; 管理员和学生登录&#xff0c;图书管理&#xff0c;图书添加删除修改&#xff0c;图书 借阅&#xff0c;图书归还&#xff0c;图书查看&#xff0c;学…

使用 Flash Builder 的 Apple iOS 开发过程

使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前&#xff0c;必须…

grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

2019独角兽企业重金招聘Python工程师标准>>> 1. 简单介绍 在用于查找子字符串的算法当中&#xff0c;BM&#xff08;Boyer-Moore&#xff09;算法是目前被认为最高效的字符串搜索算法&#xff0c;它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下&#xf…

多线程threading

threading用于提供线程相关的操作&#xff0c;线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组&#xff0c;线程也不能被停止、暂停、恢复、中断。 1. threading模块提供的类&#xff1a; Thread, Lock, Rlock, Condition, [Bounded]Sem…

一个简单的程序来使用WiredTiger 存储引擎

前言 WiredTiger 自 mongodb3.0 集成进来之后为mongodb拉回了大量的口碑&#xff0c;从而在mongodb-3.2 版本直接代替了in-memory存储引擎&#xff0c;作为了mongodb的默认存储引擎。其 通过支持Append-only btree lsm-tree 以及 针对磁盘/内存数据结构上的多核和无锁优化&am…

Java项目:网上商城系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述功能 javaweb 网上商城系统&#xff0c;前台&#xff0b;后台管理&#xff0c;用户注册&#xff0c;登录&#xff0c;上哦展示&#xff0c;分组展示&#xff0c;搜索&#xff0c;收货地址管理&…