最近收到几个好心人发来的邮件,指出我的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. Ajax不执行回调函数的原因(转)

    今天用ajax的post请求后台,但是始终不执行回调函数,经查得知,ajax不执行回调函数的原因如下: jquery中规定返回的JSON字符串的KEY要用引号括起来,如{“result”: 1}这样才 ...

  2. JDK8到JDK12各个版本的重要特性整理

    JDK8新特性 1.Lambda表达式 2.函数式编程 3.接口可以添加默认方法和静态方法,也就是定义不需要实现类实现的方法 4.方法引用 5.重复注解,同一个注解可以使用多次 6.引入Optiona ...

  3. vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用

    vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...

  4. CSS——div垂直居中及div内文字垂直居中

    最近做demo时,经常需要div垂直居中或者让div内文字相对div垂直居中.水平居中比较简单,就不多说了,这里主要记录一下垂直居中的一些方法. 一.div垂直居中的一些方法: 1.当height.w ...

  5. zigbee 安全通信加密链接密钥

    ---恢复内容开始--- #define KEY_TYPE_TC_MASTER  0        // Trust Center Master Key信任中心主密钥#define KEY_TYPE_ ...

  6. linux 定时计划任务设置

    安装 crontabs服务并设置开机自启 yum install crontabs systemctl enable crond (设为开机启动) systemctl start crond(启动cr ...

  7. replace用法替换实例

    实例一: 待处理字符串:str="display=test name=mu display=temp" 要求:把display=后的值都改成localhost JS处理方法: st ...

  8. anaconda中安装mmdetection

    1.新建conda环境(有则跳过)     conda create -n py36 python=3.6 && source activate py36 2.安装pytorch    ...

  9. Docker 简单部署 ElasticSearch

    https://www.cnblogs.com/jianxuanbing/p/9410800.html

  10. 用Xshell在centos7下安装lnmp服务

    虚拟机已创建好,本机已安装Xshell 一.准备工作:安装常用工具 1.1  yum install -y vim 备注:-y是同意安装过程中的询问,不被询问打断安装 vim:vim是一个类似于Vi的 ...