深圳市福田区福保街道福保社区桃花路3号国资国企产业创新中心7层 13136231190 youxi@j9.com

新闻中心

两位格子数据怎样装进一个字节:九次格子改值的两位打包(实例23)

2026-11-04

只有四种状态的小格子可以用两位表示,一字节容纳四个。修改其中一个格子时,需要只替换对应的两位,不能把整字节直接改成新状态值。

先固定规则和输入

十二格依次装入三个字节,每格状态为零到三。每个字节中编号较小的格子放低两位,依次使用权重一、四、十六、六十四。改值先清除目标两位,再放入新状态,其他格子不变。

初始十二格[0, 0, 0, 0, 3, 1, 3, 1, 3, 3, 3, 3] 初始三个字节[0, 119, 255]

把结果按步骤记下来

修改1:格4写成0,位于字节1从低位数偏移0位;字节由[0, 119, 255]变为[0, 116, 255],读回逻辑十二格[0, 0, 0, 0, 0, 1, 3, 1, 3, 3, 3, 3]。

修改2:格7写成3,位于字节1从低位数偏移6位;字节由[0, 116, 255]变为[0, 244, 255],读回逻辑十二格[0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 3]。

修改3:格11写成2,位于字节2从低位数偏移6位;字节由[0, 244, 255]变为[0, 244, 191],读回逻辑十二格[0, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 2]。

修改4:格0写成2,位于字节0从低位数偏移0位;字节由[0, 244, 191]变为[2, 244, 191],读回逻辑十二格[2, 0, 0, 0, 0, 1, 3, 3, 3, 3, 3, 2]。

修改5:格2写成1,位于字节0从低位数偏移4位;字节由[2, 244, 191]变为[18, 244, 191],读回逻辑十二格[2, 0, 1, 0, 0, 1, 3, 3, 3, 3, 3, 2]。

修改6:格7写成1,位于字节1从低位数偏移6位;字节由[18, 244, 191]变为[18, 116, 191],读回逻辑十二格[2, 0, 1, 0, 0, 1, 3, 1, 3, 3, 3, 2]。

修改7:格5写成3,位于字节1从低位数偏移2位;字节由[18, 116, 191]变为[18, 124, 191],读回逻辑十二格[2, 0, 1, 0, 0, 3, 3, 1, 3, 3, 3, 2]。

修改8:格1写成1,位于字节0从低位数偏移2位;字节由[18, 124, 191]变为[22, 124, 191],读回逻辑十二格[2, 1, 1, 0, 0, 3, 3, 1, 3, 3, 3, 2]。

修改9:格4写成1,位于字节1从低位数偏移0位;字节由[22, 124, 191]变为[22, 125, 191],读回逻辑十二格[2, 1, 1, 0, 1, 3, 3, 1, 3, 3, 3, 2]。

每次操作只替换一个两位字段。写入值与原值相同也属于有效的空变化,不能因此移动后面格子的位序或改变字节长度。

自己复核的办法

可以用位运算实现写入,再用除以四的幂并对四取余的方法独立读回。每次修改后,都应核对十二格是否与逻辑状态一致,并检查非目标格没有发生变化。

建议先遮住结果,用本例原始输入独立完成一遍,再逐项对照。若出现差异,先找最早不一致的位置,检查索引从零还是从一开始、边界是否包含,以及比较或更新发生的先后。只比较最后一个数,往往无法分辨规则理解与计算步骤分别出了什么问题。

使用这个练习的边界

这里只压缩状态编号,颜色或地形含义需要另一张表解释。位序是本例自定的格式约定,跨工具读取时必须一致;改变一位的含义可能影响很多格子,因此格式版本也应明确。