如何在Brainfuck中保留源地址值并复制字节到指定地址
如何在Brainfuck中保留原地址值的前提下复制数据?
要保留原地址的数值,直接用原地址作为循环条件肯定不行——因为Brainfuck的[会把当前单元格的值减到0才停止循环。解决办法是用一个临时中转地址,分两步完成复制:
- 先把原地址的值转移到临时地址(此时原地址会被清零)
- 再通过临时地址的循环,同时给原地址和目标地址累加,把数值同时写回去
给你写个可运行的示例代码:
> ++++++ // 初始化@1 = 6 > // 移动到@2(临时中转地址,初始为0) [ // 第一步:把@1的值转移到@2,循环结束后@1=0,@2=6 >+ <- ] >> >>>>> // 从@2移动到@8(目标地址) [ // 第二步:循环给@8和@1累加,直到@2=0 + // @8 加1 <<+ // @1 加1(恢复原数值) <- // @2 减1(控制循环次数) ]
执行过程拆解:
- 第一阶段循环结束:
@1=0,@2=6,@8=0 - 第二阶段循环会执行6次,每次:
@8加1,@1加1,@2减1
- 最终结果:
@1=6(保留了初始值),@8=6(完成复制)
这种方法只需要一个额外的临时地址,是Brainfuck里保留原值复制的标准写法。
内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira
相关产品推荐
相关产品推荐

