如何在 Java 中将两个整数打包成 4 位短?
Posted
技术标签:
【中文标题】如何在 Java 中将两个整数打包成 4 位短?【英文标题】:How to pack two integers into a 4 bit short in Java? 【发布时间】:2016-01-05 16:00:51 【问题描述】:我遇到了一个问题,需要我将两个数据值打包和解包成一个短片。不幸的是,短片的前 12 位被用于其他用途,这让我有 4 位来完成我的目标。但是,我真的不知道去哪里,或者这是否可能。我知道我可以打包到 4 位中的值会有限制,但我不确定这些限制的确切值。以下是我已经知道的一些事实。
假设我有两个变量,x 和 y。
如果 y = 0,则 x 可以等于 0-15 之间的任何数字。 随着 y 的增加,x 可以占用的位数必须减少,类似于反向关系。 必须将 Y 限制为某个值才能为 X 留出空间。 在 Y 的最大值处,x = 0 X 的位数 + Y 的位数 = 4对于如何将这些数据与给定的限制打包在一起的任何帮助或不可能的事情,我们将不胜感激。谢谢!
【问题讨论】:
拿一张纸,逐行写下你可以使用的每一个 16 位模式。然后制作两列,一列标题为x
,另一列为y
,并为每个位模式分配正确的(出于您的目的)解释(根据x
和y
)。不知道你还能做什么。
如果 y=0 并且 x 可以是 0-15,那么您将与 x=0 和 y 在 0-15 中的相反情况重叠,并且无法区分它们。
听起来您正在尝试构建某种编码器/解码器,请参阅 - edgefxkits.com/blog/encoders-and-decoders-truth-tables - 该链接起初可能有点高级,但它会显示您如何“编码”将许多位转换为几位,并从几位(解码器)中取回许多位。这通常用于硬件电路,但同样可以应用于软件。
【参考方案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...但是您自然会在我们可以存储的数字大小上损失一个数量级。在 base 2 中工作也不例外。
您有 16 个唯一值。您可以将它们分配给 x 和 y 的不同组合,但您永远无法在 4 位中存储超过 16 种不同的组合。
唯一的例外是,如果您有足够的空间在数字之间使用分隔符...但在您的情况下,4 位太短,因此仅使用 2x 2 位或 1x 3 位和1 个 1 位固定长度数字。
【讨论】:
啊,我明白了。所以问题不在于将数据打包在一起,而是将数据解包。好的,我将不得不看看是否可以找到另一种解决方法来存储我的数据 没错。您恰好有 16 个唯一值,对此您无能为力。 X 和 Y 是 0-3,或者一个是 0-1,另一个是 0-7,这些是您的选择(或 0-15 的单个数字)。当然,您可以选择存储任何 16 个其他任意值,但它们将是固定值,而您正好有 16 个可用。 非常感谢您的帮助,它确实解决了我的很多问题!以上是关于如何在 Java 中将两个整数打包成 4 位短?的主要内容,如果未能解决你的问题,请参考以下文章
我在Eclipse中将一个java项目打包成jar文件后,为啥双击它时没反应?但在eclipse中是可以运行的