如何在Java中将两个整数打包成一个4位短整数?

How to pack two integers into a 4 bit short in Java?

我 运行 遇到了一个问题,需要我将两个数据值打包和解包成一个 short。不幸的是,short 的前 12 位被用于其他用途,这让我剩下 4 位来完成我的目标。但是,我真的不知道去哪里或者这是否可能。我知道我可以打包到 4 位中的值会有限制,但我不确定这些限制的确切值。以下是我已经知道的一些事实。

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

对于如何将这些数据与给定的限制打包在一起的任何帮助或不可能,我们将不胜感激。谢谢!

对于 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

否则就像说 "We can store one 2-digit numbers, so pick two numbers that add up to 99 or less and then add them together and store that"...它工作正常,直到您尝试获取存储的值并将其再次拆分。例如,如果您只能在该字段中看到“86”,您怎么知道这些值是多少?你不知道它是 1+85、85+1、40+46 还是任何其他可能的组合

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

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

唯一的例外是如果你有足够的 space 在你的数字之间使用分隔符...但在你的情况下 4 位太短了,只使用 2x 2 位会更有效或 1x 3 位和 1x 1 位 fixed-length 数字。