You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Brainfuck中以数字形式打印指针指向的单元格值?

在Brainfuck中以数字形式打印8位单元格值(0-255范围)

适配需求的实现代码

针对初始单元格布局 (0)(0)(125)(0)(0)(指针指向值为125的单元格),以下代码可直接输出数字125,且仅占用11个单元格:

>++++++++++<[->+>+<<]>>[-<<+>>]<<[->>+>+<<<]>>>[-<<<+>>>]<[->++++++++++<[->+>+<<]>>[-<<+>>]<<[.>+<<-]>]>++++++++++++++++++++++++++++++++.

逐行注释说明

初始状态:指针位于第3个单元格(值=125),单元格序列为 [0,0,125,0,0,0,0,0,0,0,0](后续操作仅扩展至11个单元格)

  1. >++++++++++<
    移动指针到右侧单元格(第4位),写入除数10(10个+),再移回原单元格(第3位),为十位/个位的除法运算做准备。

  2. [->+>+<<]
    循环执行:原单元格值减1,同时给右侧第4、5位单元格各加1,直到原单元格值为0。
    作用:将125拆分为12组10(第4位值=12)和余数5(第5位值=5)——这是125÷10的商和余数实现逻辑。

  3. >>[-<<+>>]
    移到第5位(余数5),循环将第4位的12减1,同时给原单元格(第3位)加1,直到第4位值为0。
    作用:把商12移回原单元格,此时单元格状态:[0,0,12,10,5,0,...]

  4. <<[->>+>+<<<]
    移回原单元格(第3位,值=12),循环减1,给右侧第5、6位单元格各加1,直到原单元格值为0。
    作用:将12拆分为1组10(第5位值=1)和余数2(第6位值=2)——实现12÷10,得到百位1、十位2。

  5. >>>[-<<<+>>>]
    移到第6位(余数2),循环将第5位的1减1,给原单元格(第3位)加1,直到第5位值为0。
    作用:把百位1移回原单元格,此时单元格状态:[0,0,1,10,5,2,...]

  6. <[->++++++++++<[->+>+<<]>>[-<<+>>]<<[.>+<<-]>]
    移到第5位(值=2,十位),先将除数10写入第7位,通过除法循环得到商2,给商加48(转为ASCII字符'2')后打印,最后清理临时单元格。

  7. >++++++++++++++++++++++++++++++++.
    移到第6位(值=5,个位),加48(转为ASCII字符'5')后打印,完成最终输出。

Brainfuck除法操作核心逻辑

Brainfuck没有原生除法指令,所有正整数除法都依赖减法循环实现,步骤如下:

  1. 准备三个单元格:被除数(存储要计算的数)、除数(固定值,如10、100)、商(初始为0)
  2. 循环执行:被除数减去除数,同时商加1,直到被除数的值小于除数
  3. 循环结束后,商单元格的值就是除法的商,被除数单元格剩余的值就是余数

以计算125 ÷ 10为例:

  • 初始状态:被除数=125,除数=10,商=0
  • 循环12次后:被除数=125 - 12×10 = 5,商=12
  • 最终结果:商12,余数5

这种方式仅适用于非负整数,完全覆盖0-255的8位单元格值范围。

内容的提问来源于stack exchange,提问作者Pertz Hertz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:09:30