-2

我需要在一个变量中传达 16 个项目的可用性信息,它们的 id(0-15)。

char item_availablity[16];

我可以用 2 个字节对其进行编码,其中每个位都映射到一个项目 id,其中1表示可用和0表示不可用 For ex0000100010001000 这个数字包含具有 id 4812的项目可用的信息

我需要使用少于 2 个字节对这些信息进行编码。

这可能吗?如果是这样,怎么做?

4

2 回答 2

3

简而言之:

你不能。用不到 16 位存储 1 位关于 16 个独立事物的信息是根本不可能的。也就是说,在一般情况下。

一个例外是如果有一些限制。例如,让我们调用 items i_1, i_2 ... i_16。如果您知道当且仅当i_1也可用时它是可用的,那么您可以仅用一位编码关于这两个项目的可用性。 i_2

一个更复杂的例子是i_1可用的 iffi_2i_3可用的。然后您可以将这三个项目的可用性存储在两位中。

但是对于一般情况,不,这是完全不可能的。

于 2018-06-19T11:55:41.013 回答
1

在这里尝试开箱即用 - 如果某些项目比其他项目更稀有,您可以使用可变长度编码,这样平均而言,存储信息所需的时间不到 16 位。但是,将存在需要超过 16 位的可用性组合。

于 2018-06-19T22:28:51.933 回答