java - 如何在Java中将两个整数打包成4位short?

标签 java bit short

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

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

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

任何有关如何将这些数据与给定限制打包在一起的帮助或不可能的信息将非常感激。谢谢!

最佳答案

对于 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 的数字,然后将它们加在一起并存储”...它工作正常,直到您尝试取存储值(value)并将其再次分割回来。例如,如果您只能在字段中看到“86”,您如何知道这些值是什么?您不知道它是 1+85、85+1、40+46 还是任何其他可能的组合

在这种情况下,正确的答案是存储 0 到 9 之间的两个数字,因此 86 是 8 + 6...但是我们可以存储的数字大小自然会丢失一个数量级。在 Base 2 中工作也没有什么不同。

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

唯一的异常(exception)是,如果您有足够的空间在数字之间使用分隔符...但在您的情况下,4 位太短,因此仅使用 2x 2 位或 1x 3 位会更有效1x 1 位固定长度数字。

关于java - 如何在Java中将两个整数打包成4位short?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34615973/

相关文章:

Java Time2 从 3 个整数变为单个整数

Java:短最小值 -> 不兼容类型:必需:short,找到:int

java - 达到 max_size 时 c3p0 不释放连接

c - 按位乘法得到结果

matlab - Bitget 需要处理大量输入吗?

lisp - 如何在普通的 lisp 中获取 64 位整数?

c - 如何在C中将短值除以int

javascript - PHP:这样做 ||那(像javascript)

java - 谁能推荐一个可以执行所有典型协议(protocol)(ssh 等)的 java FOSS 服务器

java - 为什么 ZipInputStream 无法读取 ZipOutputStream 的输出?