fx-991CN X bug笔记——实战基础篇

即使不了解原理,我们也可以实战,但我比较不喜欢“知其然而不知其所以然”,这也是我铺垫许久的原因。

在阅读之前,可以思考这些问题:

  1. 如何打出字符24($)?
  2. 如何打出字符83(Int()?

字符转换器(计算模式、虚数模式)

相关链接:历史记录格式https://blog.csdn.net/weixin_67572129/article/details/142618896#t3字符FE23(lbf/in2>kPa)可以由SHIFT+8+下+2+7打出。将其放入合法的算式后存入历史记录,再读取时会将其中字节23解释为算式终止符,从而在输入区结尾有单个字节FE紧接着字节00。此时,如果打出单字节字符,则会得到对应的FE双字节字符;如果打出双字节字符,会有神奇的效果。

具体操作

俗称的进入字符转换器:打出1个数字+lbf/in2>kPa,按等于、上、左。

具体按键:1/8/0+SHIFT+8+下+2+7+等于+上+左。

可用操作

以下操作除了特殊标注,均可连续进行,即保留字符转换器。注意先刷出来的字符在右边,后刷出来的字符在左边。

原理读者自己思考,核心思想是双字节字符第二字节有时可能被判断为双字节字符的第一字节。

温馨提示

最重要的一点是,不要过于相信你的眼睛。有时需要盲按,请在脑子里自己思考要做什么。

一些字符在不同机型上显示效果不同,例如字符FEFD。

对于verF机型,字符FEFE会停止渲染算式。对于verC,字符FEFE会被“正常”渲染为Unknow。

有些字符在渲染时会保留上一次渲染的结果,使得你对该字符是什么出现错觉。

渲染字符是从左到右遍历的。如果光标在一个双字节字符中间,那么会被渲染到其它位置。

定义不可刷字符:不能用字符转换器刷出的字符

结束字符转换器(不保留字符转换器)

1个数字+DEL。

提取第二字节成为单字节字符

打出双字节字符,左+左+右+1个数字+DEL。

组合双字节字符的第一字节与单字节字符

打出双字节字符,左+左+右,打出单字节字符,右+DEL+左。

组合双字节字符A的第一字节与双字节字符B的第二字节

打出字符B,左+左+右,打出字符A,左+1个数字+DEL+左+右,打出任意双字节字符(一般用Ran#,SHIFT+点),右+DEL+DEL+右+左。

小练习

在计算模式下,将算式调整为:字符31(1)、字符4D(@)、字符A6(+)、字符3A(A)、字符24($)、字符FD20(an)。

历史记录刷字符(计算模式、虚数模式)

相关链接:字符表​​​​​​https://blog.csdn.net/weixin_67572129/article/details/142435047#t0相关链接:浮点数格式https://blog.csdn.net/weixin_67572129/article/details/142469500#t1相关链接:单字节变量https://blog.csdn.net/weixin_67572129/article/details/142618896#t0

计算器为前12个变量留了位置,后4个@与下文的历史记录重叠。

——bug笔记之“变量与历史记录篇

一个小特性: (注:实际等号右边不需要含变量)

以下列出了您可以使用 CALC 保存的表达式类型。

……

等式左侧为单个变量、等式右侧为含变量的表达式:……

——说明书第34页

少量字符(最多4个字节)

最开始先查表,得到所需字符在字符表对应的字节。

进入字符转换器作为第一条历史记录,接着刷出字符以构造算式:(@指字符4D)(以下根据字节数是否为4选其一)(注意16进制字符是字符表第三行的内容,别打成变量A~F或组合数C

  • “x:@=1.0000一到四个字节的十六进制23”
  • “x:@=1.0000五个字节的十六进制 x10 23”(x10是一整个字符)

CALC+等于+等于。接着,翻回第一条原字符转换器的历史记录,可以发现算式区出现了所需字符。

可能因为进位使得该方法失效。

原理读者自己思考。

举例:算式为x:@=1.0000848823,得到Int(GCD(

举例:算式为x:@=1.000024242424 x10 23,得到五个$符号

较多字符

不常用,我也不会,但是我这里记一笔。

单个4D基本上只能做到这样了。但是为什么只用4D呢?可以把4D、4E、4F三个变量拼起来一块用。我曾经发过一个在虚数模式下刷38字的方法:

每个浮点数可以放8字节的数据,格式为1.(前7字节)x10(最后一个字节)

先按照顺序给变量赋值:

D=1.0000(6字节),M=1.(8字节),F=1.(8字节),x=1.(8字节)+1.(8字节)i

切换模式以清空历史记录,刷出4D和4F(4D在前面):“@@”,CALC,把两个@都赋值为0,然后AC,左,改为这个式子:

“111: ((M)): x: @=D: @=F”

CALC,5次=,向上翻到第一条历史记录

(原理解释略)

但是,这种方法还是有一些限制。第一,它只能在虚数模式用。(计算模式里可以去掉x的虚部,可是那样就只能刷30个字符了。)第二,如果一个浮点数的最后几位有效数字中包含粗体16进制字母,它可能会触发进位,导致刷字符失败。而且,指数位也不能包含粗体16进制字母。(其实所有通过这个原理刷字符的方法都有这个缺点。)

——某github仓库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值