Brainfuck程序判断输入与5大小的单元格下溢问题求助
Brainfuck数值比较下溢误判问题修复
问题根源
原程序通过同时递减输入值单元格和存储数值5的单元格判断大小,但Brainfuck单元格是无符号8位字节:当输入值小于5时,输入单元格会先被减至0,继续递减会触发下溢,值跳转为255。此时存储5的单元格仍在递减,直到减至0时,输入单元格的255会被判定为“还有剩余”,错误触发输出maior的逻辑。
另外原程序还存在隐性问题:直接用输入字符的ASCII码与字符5的ASCII码(53)比较,而非实际数值,导致输入逻辑和预期不符。
修正思路
- 先将输入的ASCII字符转换为实际数值(减去ASCII码48,即字符
0的编码) - 采用标记位区分耗尽顺序的安全比较逻辑,避免下溢:用独立单元格记录“输入值先耗尽”还是“检查值先耗尽”
- 根据标记位分支执行对应输出,确保逻辑准确
修正后的代码
>>>+<<< # 单元格3设为1,作为输出开关 +++++[->+<]< # 单元格1存入数值5,单元格0清空 ,. # 读取用户输入的字符并输出 [-<-------->+<] # 将输入字符的ASCII码转成实际数值(减48) >[->+<]< # 转换后的数值移回单元格0,单元格2清空 # 安全比较逻辑:同时递减输入值和检查值,直到其中一个耗尽 [ >- # 检查值(单元格1)减1 <[-<+>]> # 若输入值未耗尽则减1,否则标记单元格2=1(输入<5) < # 回到输入值单元格 ] # 输入<5时输出menor >>[ <<<<[-] # 清空单元格0避免干扰 # 输出'menor' ++++++++++[>+++++++<-]>+++++++.[-]< # M ++++++++++[>++++++<-]>+++++++++.[-]< # E ++++++++++[>+++++++<-]>++++++++.[-]< # N ++++++++++[>++++++++<-]>-.[-]< # O ++++++++++[>++++++++<-]>++.[-]< # R >>>[-] # 清空开关单元格3,阻断maior输出 <<<< ] # 输入≥5时输出maior >>>[ <<<<[-] # 输出'maior' ++++++++++[>+++++++<-]>+++++++.[-]< # M ++++++++++[>++++++<-]>+++++.[-]< # A ++++++++++[>+++++++<-]>+++.[-]< # I ++++++++++[>++++++++<-]>-.[-]< # O ++++++++++[>++++++++<-]>++.[-] # R <<<< ]
关键修正点
- ASCII转数值:解决原程序混淆字符编码与实际数值的问题
- 无下溢比较:通过条件判断避免输入单元格递减至0后继续操作,彻底解决下溢回绕的误判
- 分支输出:用标记位和开关单元格实现互斥的输出逻辑,确保两种情况都能正确触发
内容的提问来源于stack exchange,提问作者user31796582
相关产品推荐
相关产品推荐

