最近收到几个好心人发来的邮件,指出我的BinCalc存在低级BUG,即1+1算出来不等于2~~鉴于存在这种误解的人之多,俺不得不爬出来澄清一下~~我的Megatops BinCalc当中的计算器是RPN Calculator!(同学们难道没有发现BinCalc的计算器没有等号嘛~~囧rz)

如果你是学软件出身的但是居然没有听说过RPN,那你一定是没听课也没做作业的了~~逆波兰表达式的概念最早出现在C圣经的课后习题里面。不过如果你学的是叹号强那本误人子弟的烂书……那也最迟会在编译原理里面看到它。如果你是学硬件出身的~~俺也不是很清楚硬件课程有没有提到RPN的,但是感觉应该没道理不提。

BinCalc的RPN计算器基本上是和惠普计算器的RPN操作相同的,是XYTZ 4寄存器的经典RPN(惠普的计算器有的型号多一个LASTx寄存器,但是换汤不换药)。和惠普的计算器相比,BinCalc的RPN计算器费了大力气硬是挤下了一个可视化的堆栈,用起来应该是比只有一行显示的那种HP计算器好用多了。RPN的原理极其简单,简述如下:

BinCalc的RPN计算器有XYZT四个寄存器。在界面的多进制面板中显示和输入的都是X寄存器的内容;YZT三个寄存器可以看成是个堆栈,其中T是栈顶寄存器(可以作为常数寄存器来使用)。

按ENTER键是执行压栈操作~~不是当作等号用的啦(╯﹏╰),所以你1+1 ENTER~~结果当然不会是2~~

如上图,按了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都停产好久了~~现在被当作古董卖价格有点夸张了。

[转]关于Megatops BinCalc RPN计算器的说明的更多相关文章

  1. 信利SC123金融财务计算器评测——不错的HP 12C仿品

    最近X宝48包邮购入信利SC123金融计算器,只是为了玩一玩(没错你的好友盗版狂魔又上线了),因为这是目前市面上能买到的最便宜的金融计算器了,也是能买到的最便宜的RPN计算器,顺手出个评测.这个计算器 ...

  2. 计算器模拟器中的情怀——Free42简介

    说到情怀,我首先想聊几句电子计算器的历史.电子计算器这种东西,在最近这几十年的人类发展中,曾经起到过相当重要的作用,尤其是在七十年代到九十年代初这个时期,大型的全功能电脑贵得要命,有钱有时也买不到,而 ...

  3. [Stanford 2011] Ordinary Calculator(By myself)

    说明: 前面的RPN计算器是按照stanford课程做的,是后缀表达式的计算.现在这个计算器是自己做的.这个是一般的计算器,即中缀表达式的计算,而且把计算过程也显示在屏幕上, 设计方法: 在Model ...

  4. 《Haskell趣学指南》

    <Haskell趣学指南> 基本信息 原书名:Learn You a Haskell for Great Good!: A Beginner's Guide 原出版社: No Starch ...

  5. linuxtoy.org资源

    https://linuxtoy.org/archives.html Archives 在 Android 系统上安装 Debian Linux 与 R (2015-07-14) Pinos:实现摄像 ...

  6. c++计算器后续(2)

    自娱自乐: 大概是了解了一下前缀.中缀.后缀表示法是啥,并没有去深究,比如考虑实现啊,然后Calculation类里面的计算方法还是选用原来的直接对中缀表达式求值,只是把代码改得规范点,以上. 各表示 ...

  7. 数据结构之栈—强大的四则复杂运算计算器(超过windows自带的科学计算器)【中缀转后缀表达式】

    比windows自带计算器还强的四则复杂运算计算器! 实测随机打出两组复杂算式:-7.5 * 6 / ( -2 + ( -6.5 -  -5.22 ) )与7.5+-3*8/(7+2) windows ...

  8. 1.C#WinForm基础制作简单计算器

    利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...

  9. 自己动手写计算器v1.1

    这个改动主要是使用工厂模式替代了简单工厂模式,这样做的好处是如果以后我们要扩充其他运算时,就不用总是去修改工厂类, 这是可以采取工厂模式,主要是将原来简单工厂类的逻辑判断分离出来,将它作为一个借口,与 ...

随机推荐

  1. Windbg程序调试系列3-线程阻塞问题

    上一篇博文给大家分享了使用Windbg分析内存泄露问题: Windbg程序调试系列2-内存泄露问题 本篇我们继续跟大家分享,如何分析解决线程阻塞问题. 从根本上讲,线程阻塞属于程序Hang的一种,其表 ...

  2. Ubuntu 安装第三方工具

    1. pycharm  安装(链接:https://pan.baidu.com/s/1fIp-AhBmnPvqYW40140RLw     提取码:ukkv ) 1.运行以下命令安装 sh pycha ...

  3. JavaFX-Stage

    1.Stage类继承自Window类,继承了Window类的show()方法,Stage的close()方法实际上是调用了继承自Window类的hide()方法.另外还有Window的setOpaci ...

  4. Hadoop HDFS 用java API 进行读写

    public class HdfsApp { public static FileSystem getFileSystem() throws Exception { Configuration con ...

  5. hibernate 集合查询

    hibernate 集合查询: public Long getPurchaseRecordByBlueIdCount(List<Long> blueIdList) { StringBuil ...

  6. java0425 wen IO

  7. 利用composer安装laraval

    首先,毋庸置疑我们需要安装composer.这个在我上一篇文章中有提到,这里不做过多赘述. 其次,配置composer国内镜像.(如果不配置国内镜像,你们懂得) 打开cmd输入以下命令即可 compo ...

  8. Docker 运维高级应用管理

     Docker 基本应用 1.Docker 介绍及安装 2.Docket 使用命令 3.Docker run命令参数整理 4.Docker 构建镜像 Docker Compose 高级应用 1.Doc ...

  9. context使用

    1. 概述 go语言中goroutine之间的关联关系,缺乏维护,在erlang中有专门的机制来保障新开协程的生命周期,在go语言中,只能通过channel + select来实现,但不够直观,很绕. ...

  10. kubernets 概念

    理解 Kubernetes 对象 各种资源对象的理解和定义 Kubernetes 中 Pod 的选举过程