【转载】linux命令行计算器bc的一个“坑”
【转载自】http://blog.chinaunix.net/uid-174325-id-3518953.html
结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放ibase前,不然obase的设置值也会以ibase来计算,会导致一些理解上和使用上的偏差
想计算一个数值,使用bc 可以使用 echo " xxx+yyy"|bc 这样来用
$echo "111+222"|bc
333
如果输入的是16进制数字的话可以使用ibase参数来设置:
$echo "ibase=16;111+222"|bc
819
如果想让输出也显示16进制怎么办哪,一般人会想当然的设置obase参数,如下:
$echo "ibase=16; obase=16; 111+222"|bc
怎么样?!!如果你也是这样想的话,你也我和一样掉坑里面了。看下输出是啥
$echo "ibase=16; obase=16; 111+222"|bc
01 15 05
$
kao, so tmd why???? 应该显示333啊
后来在测试中发现如果把 obase放在ibase前面的话就正常了:
$echo "obase=16; ibase=16; 111+222"|bc
333
这又是so tmd why? 难道是bug,我当时也是这么想的.
但在google之 之后,发现我们现在有时还是 too young,too simple, sometimes naive.
bc 在gnu世界这么多年如果还存在这种bug的话也太那个啦!
http://stackoverflow.com还是个神圣的地方,啥问题都有人回答。
http://stackoverflow.com/questions/9889839/bc-and-its-ibase-obase-options 参看这个链接。
原来ibase如果放在最前面的话,后面所有的输入都回被认为是16进制的,包括obase,所以上面ibase=16;
obase=16 中的obase其实被设置为了10 进制中的22,而bc在obase大于16以后就会用多字节表示:
1*22*22+15*22+5 = 819 一点错都没有。
总之,一句话先设置obase,在设置ibase就没错。
好吧,我承认自己naive!
(另外stackoverflow.com上面提到的是另外一个坑:
For multi-digit numbers, bc changes all input digits greater or equal to ibase to the value of ibase-1.
)
发篇博文,提醒同道, “坑贫道不坑道友” !!!!
【转载】linux命令行计算器bc的一个“坑”的更多相关文章
- 分享一个命令行计算器-bc
分享一个命令行计算器-bc 假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它 ...
- Linux中的一个命令行计算器bc简介
假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它有着几种不同的操作模式,例如 ...
- 一步步打造自己的linux命令行计算器
相信很多人,在工作中会需要使用到计算器.一般的做法是,打开并使用系统自带的计算器. 这种做法可能对我来说,有如下几个问题. 太慢.每次需要打开计算器,然后改成编程模式,手工选择进制,再使用输入表达式进 ...
- linux命令行计算器 <转>
转自 http://blog.chinaunix.net/uid-26959241-id-3207711.html 详细文档请 man bc 在windows下,大家都知道直接运行calc,(c:\w ...
- Linux命令行初学(一)
linux命令大全:https://www.linuxcool.com/ 大概了解到有哪些命令,如果有需要的话可以在该网站上查询. 另外在实验楼学习了一些基础,该篇博客就此次对linux命令行的学习进 ...
- 在Linux命令行中使用计算器的5个命令
大家好,我是良许. 在使用 Linux 时,我们有时会需要做一些计算,那么我们就可能需要用到计算器.在 Linux 命令行里,有许多计算器工具,这些命令行计算器可以让我们执行科学计算.财务计算或者一些 ...
- 像黑客一样使用Linux命令行(转载)
阅读目录 前言 使用 tmux 复用控制台窗口 在命令行中快速移动光标 在命令行中快速删除文本 快速查看和搜索历史命令 快速引用和修饰历史命令 录制屏幕并转换为 gif 动画图片 总结 回到顶部 前言 ...
- 【转载】Linux命令行常用光标移动快捷键
声明:下面内容来自:http://www.linuxidc.com/Linux/2016-10/136027.htm, 来源:linux社区 作者:aslongas 我转载于此处,为了作个笔记,方便 ...
- 【转载】Linux 命令行快捷键 - 移动光标
Linux 命令行快捷键 - 移动光标 涉及在linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词 ...
随机推荐
- [转]LINQ操作数据库
查询表达式(LINQ)简介 C#3.0新语特性和改进,这些新特性在我们编写程序时为我们提供了非常大的帮助.从这篇开始,我们开始一起来探讨LINQ. LINQ是Language Integrated Q ...
- 对jQuery.extend()方法的分析
jQuery.extend方法是我们常用的方法,也是jQuery源码中的基础方法.它的主要作用是:将一个或多个“源对象”合并到一个“目标对象”中,并返回目标对象.它主要有三种表现形式: a.jQuer ...
- express 3.0.x 中默认不支持layout.ejs的解决方法
1.第一种方法用include 用<% include 模板名(可不加.ejs) %>的写法,具体如下 <% include header %> //套用布局拆成两部分 hea ...
- 云风的BLOG❳可靠 UDP 传输
http://mp.weixin.qq.com/s?__biz=MzA3NjYxOTA0MQ==&mid=405432715&idx=1&sn=2e40ceafd4b298e1 ...
- EL表达式对数组、集合操作
el表达式是通过${key}的方式获取对象中的值.在el表达式中有如下几个隐含的对象,pageScope,requestSope,sessionScope,applicationScope,如果要取$ ...
- codeforces #305 B Mike and Feet
跟之前做过的51Nod的移数博弈是一样的QAQ 我们考虑每个数的贡献 定义其左边第一个比他小的数的位置为L 定义其右边第一个比他小的数的位置为R 这个可以用排序+链表 或者 单调队列 搞定 那么对于区 ...
- Spring Framework 4.1.1
http://repo.spring.io/libs-release-local/org/springframework/spring/4.1.1.RELEASE/
- ~/.ctag的作用与配置
里边可以有基本配置和语言正则表达式解析的参数 # Basic options --recurse=yes --tag-relative=yes --exclude=.git # Regex for C ...
- ServletContext对象
**1 ServletContext对象 1)在web应用中,由服务器创建的唯一的一个对象是ServletContext 2)ServletContext对象在每一个Servlet中取得都是相 ...
- Android开发之MediaPlayer类
官网关于MediaPlayer类的使用简介: