【转载自】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的一个“坑”的更多相关文章

  1. 分享一个命令行计算器-bc

    分享一个命令行计算器-bc 假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它 ...

  2. Linux中的一个命令行计算器bc简介

    假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它有着几种不同的操作模式,例如 ...

  3. 一步步打造自己的linux命令行计算器

    相信很多人,在工作中会需要使用到计算器.一般的做法是,打开并使用系统自带的计算器. 这种做法可能对我来说,有如下几个问题. 太慢.每次需要打开计算器,然后改成编程模式,手工选择进制,再使用输入表达式进 ...

  4. linux命令行计算器 <转>

    转自 http://blog.chinaunix.net/uid-26959241-id-3207711.html 详细文档请 man bc 在windows下,大家都知道直接运行calc,(c:\w ...

  5. Linux命令行初学(一)

    linux命令大全:https://www.linuxcool.com/ 大概了解到有哪些命令,如果有需要的话可以在该网站上查询. 另外在实验楼学习了一些基础,该篇博客就此次对linux命令行的学习进 ...

  6. 在Linux命令行中使用计算器的5个命令

    大家好,我是良许. 在使用 Linux 时,我们有时会需要做一些计算,那么我们就可能需要用到计算器.在 Linux 命令行里,有许多计算器工具,这些命令行计算器可以让我们执行科学计算.财务计算或者一些 ...

  7. 像黑客一样使用Linux命令行(转载)

    阅读目录 前言 使用 tmux 复用控制台窗口 在命令行中快速移动光标 在命令行中快速删除文本 快速查看和搜索历史命令 快速引用和修饰历史命令 录制屏幕并转换为 gif 动画图片 总结 回到顶部 前言 ...

  8. 【转载】Linux命令行常用光标移动快捷键

    声明:下面内容来自:http://www.linuxidc.com/Linux/2016-10/136027.htm, 来源:linux社区  作者:aslongas 我转载于此处,为了作个笔记,方便 ...

  9. 【转载】Linux 命令行快捷键 - 移动光标

    Linux 命令行快捷键 - 移动光标 涉及在linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词 ...

随机推荐

  1. [转载]用.NET开发的磁力搜索引擎——Btbook.net

    去年10月份开始研究相关的协议与资料,中途乱七八糟的事情差点没坚持下来,寒假里修修补补上礼拜把Btbook发布了,经过社交网络的推广之后,上线第三天UV就达到了两万多,也算是对这几个月工作的一点肯定吧 ...

  2. 错误:[将截断字符串或二进制数据。\r\n语句已终止。]

    错误:[将截断字符串或二进制数据.\r\n语句已终止.] 解决方法是将数据库表这列的长度调大一点

  3. PAT-乙级-1010. 一元多项式求导 (25)

    1010. 一元多项式求导 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 设计函数求一元多项式的导数.(注:xn(n为整数)的一 ...

  4. python检测文件是否更新

    import os import time filename = "test.txt" info = os.stat(filename) if time.time()-info.s ...

  5. CodeForces 279B Books

    http://codeforces.com/problemset/problem/279/B 题意 :Valera 有很多的空闲时间,所以他决定看书,给出n本书,编号1到n,和看每本书需要的时间,他看 ...

  6. cocos2d-x3.9 NDK android 环境搭建过程中遇到的错误

    编译环境:Mac OS, NDK r9d 错误:arm-linux-androideabi-gcc: error trying to exec '/media/Project/adt-bundle-l ...

  7. boost库在windows下的编译和使用

    因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boos ...

  8. socket关闭动作以及socket状态的总结

    主要部分,四次握手: 断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接.这里先暂时说正常情况.当调用close ...

  9. world符号大全

    ■特殊符号:·⊙①⊕◎Θ⊙●○¤㊣㈱@の■□★☆◆◇◣◢ ◤◥▲△▼▽⊿◢ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊▋▌▍▎▏■ ▓ 回 □ 〓≡↑↓→←↘↙♀♂┇┅|$ @ * & # ※ 卍 卐 ...

  10. 25.allegro中模块复用[原创]

    一,Module reuse 1,打开原理图 ------------------- --------------------- ctrl+i过滤器 直选part ctrl+e 查看属性 查看: 是否 ...