移位寄存器的反馈位怎样决定状态循环:独立算例08

  • 2026-11-13
  • 1

一个短二进制状态不断移位,并把若干位的异或值放回末端,可以形成可复现的状态序列。不同反馈位置可能产生不同循环,不能只看到序列变化就认为它一定遍历所有非零状态。

规则与边界

本例使用固定宽度的整数,位编号从最低位零开始。反馈是列出的抽头位异或;旧状态右移一位,再把反馈放到最高位。记录首次重复的状态,以它第一次出现的位置区分前段与循环段。

本例记录

宽度6,抽头位[1, 2, 3, 4, 5],初值25(011001)。

旧状态 | 抽头位值 | 反馈 | 新状态 011001 | [0, 0, 1, 1, 0] | 0 | 001100 001100 | [0, 1, 1, 0, 0] | 0 | 000110 000110 | [1, 1, 0, 0, 0] | 0 | 000011 000011 | [1, 0, 0, 0, 0] | 1 | 100001 100001 | [0, 0, 0, 0, 1] | 1 | 110000 110000 | [0, 0, 0, 1, 1] | 0 | 011000 011000 | [0, 0, 1, 1, 0] | 0 | 001100 首次重复状态12,前段长度1,循环长度6。

表中编号只标记本例对象,不表示排名或另一组数据中的身份。先确认输入单位与边界约定,再逐步核对中间值。零、空结果和不存在是不同状态,不能因为显示相近就互相替代;分数用精确形式保留,便于重新演算。

复核方法

固定宽度只有有限个状态,因此持续运行必然重复。全零状态在这套无常量反馈规则下会一直为零。起点不同可能落入不同循环,循环长度必须按实际状态轨迹确认,不能直接用二的宽度次方减一代替。

每一步核对抽出的位、异或结果和新状态,特别注意最高位补入位置。首次重复状态不应再计为一个新状态。为了看清零陷阱,可额外从零开始运行;为了检查周期,则应保存首次出现索引,而不是只比较相邻两个状态是否相同。

能说明什么

这是教学用的线性状态机,不适合拿来保护秘密,也不声称其输出满足任何游戏对随机性的全部需求。位序、移动方向和抽头编号一旦改变,序列也会改变,名称相似不代表实现一致。

这份记录用于理解明确规则下的游戏机制。改变输入后,结果也应随之重新计算;若操作规则不同,应先把新规则写清再比较。可以从一两个步骤手算开始,找出第一处差异,而不是只对照最后一个数值。全部中间记录都属于当前案例,不能直接当成其他场景的固定答案。