能否将取值范围0-79与0-7的两个数合并为单字节并可逆拆分?
能否将0-79和0-7的两个数合并为单个8位字节并可拆分?
答案是不可能,核心原因很直接:
- 第一个数有80种可能,第二个数有8种可能,两者的总组合数是
80 × 8 = 640种不同状态。 - 单个8位字节最多只能表示
2^8 = 256种不同状态。
640远大于256,从信息论的基本逻辑来说,你没办法把更多的独立状态无损压缩到更小的状态空间里——这就像要把640个不同的东西塞进只能装256个的盒子,必然会有多个原始组合对应同一个字节值,后续拆分的时候根本没法还原出唯一的原始数值。
你提到的9位方案其实也不够(9位最多表示512种状态,还是小于640),正确的无损合并至少需要10位:第一个数需要7位(因为26=64<80,27=128≥80),第二个数需要3位(2^3=8正好覆盖0-7),7+3=10位才能装下所有组合。
如果硬要放进8位字节里,只能做有损处理,比如把第一个数的范围压缩到0-31(用5位),和第二个数的3位凑成8位,但这样会丢失第一个数的部分精度,而且没法还原出原始的0-79的数值——但这不符合你“可后续拆分”的需求,尤其是在无预先数据认知的前提下,没有任何规则能帮你从压缩后的字节反推出唯一的原始两个数。
内容的提问来源于stack exchange,提问作者gerrgheiser
相关产品推荐
相关产品推荐

