有没有办法使用半位?

电器工程 数字逻辑 数字通讯 传播
2022-01-13 13:49:01

正如这里的大多数人所知,通过使用 4 位,我们可以从 0 数到 15(十六进制的 0123456789ABCDEF)。但是如果我们只数到 9,我们仍然会使用 4 位,并且从 A 到 F 的数字将被浪费。

然而,维基百科的二维码页面指出,仅使用 0 到 9 的数字使用每个字符 3⅓ 位,从统计的角度来看这是正确的。然而,三分之一位不是物理对象,据我所知,发送一个从 0 到 9 的数字至少使用 4 位。

有什么方法可以使用浪费的组合来有效地发送带有小数位的字符?

好的,我举个例子:必须发送两个数字“27”。使用正常的编码技术,发送的位将是 00100111。然后我们可以想象一个系统将数字“2”替换为数字“E”或“F”,具体取决于下一位;在这种情况下,下一位是 0,因此“2”被“E”替换。生成的位串将是 1101 0 111。另一方面,如果必须发送数字“28”,则“2”之后的第一位是 1,因此将其替换为数字“F”,产生字符串 1111 1 000。

在这两种情况下,都实现了 1 位的经济性,因为一个半字节用于两个不同的字符。换句话说,每个字符使用三位半。

4个回答

您不能发送半位,但您可以在传输或存储之前有效地将两个半位打包在一个位中。

你自己举了一个例子,所以你有效地回答了你自己的问题。

一种可能更简单的方法是将两个十进制数字的值简单地编码为 7 位。(一种二进制编码的双十进制)。

您可以使用霍夫曼编码,因此数字具有不同的位长。如果您知道某个数字会比其他数字更频繁地出现,那将有所帮助。

示例(出现相同的情况):

0 - 1111

1 - 1110

2 - 110

3 - 101

4 - 100

5 - 011

6 - 010

7 - 001

8 - 000

获取数字 1 的接收端示例:

第一位进来,只留下 0 到 4 作为选项。

第二位进来,只留下 0 到 2 作为选项。

第三位进入并留下 0 到 1 作为选项。

第四位进来,进来的数字是1

也许您正在寻找的是算术编码,它可以有效地编码一串符号,原则上每个符号可能需要小数(非整数)位数。(尽管总消息必须是整数位)

引用维基百科

算术编码与其他形式的熵编码(例如霍夫曼编码)的不同之处在于,算术编码不是将输入分解为分量符号并用代码替换每个符号,而是将整个消息编码为单个数字,即分数 n,其中 (0.0 ≤ n < 1.0)。

用于浮点运算的新 IEEE P754 现在除了二进制之外还定义了十进制格式。其中一种编码建议将数字数字按 3 分组为 10 位。

使用 10 位 = 1024 个可能的代码对 0 到 999 进行编码是非常有效的,而且十进制数字通常按三分组。

密集压缩十进制http ://en.wikipedia.org/wiki/Densely_packed_decimal