最近收到几个好心人发来的邮件,指出个人BinCalc存在低级BUG,即1+1算出来不等于2~~鉴于存在这种误解的人之多,俺不得不爬出来澄清一下~~个人Megatops BinCalc当中的计算器是RPN Calculator!(同窗们难道没有发现BinCalc的计算器没有等号嘛~~囧rz)程序员
若是你是学软件出身的可是竟然没有据说过RPN,那你必定是没听课也没作做业的了~~逆波兰表达式的概念最先出如今C圣经的课后习题里面。不过若是你学的是叹号强那本误人子弟的烂书……那也最迟会在编译原理里面看到它。若是你是学硬件出身的~~俺也不是很清楚硬件课程有没有提到RPN的,可是感受应该没道理不提。spa
BinCalc的RPN计算器基本上是和惠普计算器的RPN操做相同的,是XYTZ 4寄存器的经典RPN(惠普的计算器有的型号多一个LASTx寄存器,可是换汤不换药)。和惠普的计算器相比,BinCalc的RPN计算器费了大力气硬是挤下了一个可视化的堆栈,用起来应该是比只有一行显示的那种HP计算器好用多了。RPN的原理极其简单,简述以下:blog
BinCalc的RPN计算器有XYZT四个寄存器。在界面的多进制面板中显示和输入的都是X寄存器的内容;YZT三个寄存器能够当作是个堆栈,其中T是栈顶寄存器(能够做为常数寄存器来使用)。rem
按ENTER键是执行压栈操做~~不是看成等号用的啦(╯﹏╰),因此你1+1 ENTER~~结果固然不会是2~~get
如上图,按了ENTER之后,X寄存器的内容会被压入堆栈(YZT),原来T寄存器的内容由于堆栈上溢而被挤出去丢掉了。每一个寄存器都有一套本身的单目运算按钮,能够在不须要调整到X的前提下对每一个寄存器直接进行算术移位和取反等操做(BinCalc无敌可视化堆栈的威力)。最右边三个按钮是用于调整堆栈的,从上到下分别是:寄存器循环上移(至关于HP的R↑键)、寄存器循环下移(HP的R↓键)、XY寄存器互换(HP的X<>Y键)。另外CLx是X寄存器清零,CLR是清空全部寄存器(HP的CLΣ键)。这几个都好理解,本身试试就明白。博客
作二元计算的时候,状况是这样的(好比作+计算):编译
整个计算的过程你能够看做是:按下双目算符后,就会从堆栈中弹出操做数Y,与X寄存器一块进行相应的计算,计算的结果放在X寄存器内。在退栈的时候能够看到T寄存器始终是保持不变的,因此实际使用的时候T寄存器能够看成常数寄存器来用。好比有时候常常要算XXX和几个1024相乘或者相除的结果。这时候就能够把1024一直压到T寄存器去,而后就能源源不断地从堆栈中弹出1024这个数进行计算了。编译原理
RPN的双目计算乍一看彷佛很深奥的样子,实际上彻底能够看做是竖式计算:可视化
竖式计算好像小学1年级开始就玩得很熟了~~应该不用再废话。原理
另外,BinCalc在以下高亮位置有右键菜单,其余就再没有什么Readme没有提到的隐藏的机关了~~
最后~~贴一个史上最经典的程序员专用计算器:HP-16C。惋惜HP的11/12/15/16这一系列计算器最终仅有12C活的滋润一直生产到如今(如今还能买到,基本成为金融计算器的工业标准了)。15和16都停产很久了~~如今被看成古董卖价格有点夸张了。