如何将两个整数打包成4位短的Java?

时间:2016-01-05 16:00:51

标签: java bits short

我遇到了一个问题,需要我将两个数据值打包并解压缩。不幸的是,短的前12位被用于其他东西,这让我有4位来完成我的目标。但是,我真的不知道去哪里或者甚至可能。我知道我可以打包到4位的值有限制,但我不确定这些限制的确切值。以下是我已经知道的一些事实。

假设我有两个变量,x和y。

  • 如果y = 0,那么x可以等于0-15之间的任何数字。
  • 随着y的增加,x可以占用的位数必须减少,类似于反比关系。
    • Y必须限制在某个值以便为X留出空间。
    • 在Y的最大值,x = 0
  • X的位数+ Y的位数= 4

对于如何将这些数据与给定限制一起打包的任何帮助或不可能性将非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

使用4位,你唯一明智的做法就是使用固定大小的整数

X和Y都是0-3,或X是0-1,Y是0-7(反之亦然)

如果你尝试做除此之外的任何事情并且具有可变长度整数,你将不知道以下1111中的哪一个意味着

x=3 y=3
x=1 y=7
x=7 y=1
x=15 y=0
x=0 y=15

否则就像是说“我们可以存储一个2位数字,所以选择两个加起来不超过99的数字,然后将它们加在一起存储”...它工作正常,直到你试图取存储的值并再次将其拆分。例如,如果你能在场上看到“86”,你怎么知道它们的价值?你不知道它是1 + 85,85 + 1,40 + 46,还是任何其他潜在的组合

在这种情况下,正确的答案是存储0到9之间的两个数字,因此86是8 + 6 ......但是你自然会丢失我们可以存储的数字大小的数量级。在基地2工作也不例外。

您有16个唯一值。您可以将这些组合分配给x和y的不同组合,但是您将永远无法以4位存储超过16种不同的组合。

唯一的例外是,如果你有足够的空间在你的数字之间使用分隔符......但在你的情况下,4位是如此之短,以至于只使用2x 2位或1x 3位和1x 1位固定长度数字。