【问题标题】:How to store integer in fewest bits possible in Java如何在 Java 中以尽可能少的位存储整数
【发布时间】:2017-06-30 02:51:34
【问题描述】:

我有小于 16 的数字,我想以尽可能小的方式存储它们。我目前将我的整数转换为一个字节,但我不需要整个字节。我想我只需要 4 位来保存我的号码。 我想尽可能少地使用一个字节。

byte solutionLength = (byte) myArray.length;
return solutionLength;

myArray.length 始终小于 12。 如何使用尽可能少的位存储到我的变量 solutionLength

【问题讨论】:

  • 题外话:你有什么理由需要这么担心内存?只是好奇
  • 因为我将大约 8 亿个返回值存储在一个数组中。 @ZeldaZach
  • @ProgrammingCuber 也许您应该研究替代方法,因为我永远不会将 很多结果存储在数组中...您能否解释一下您的原因?正在这样做吗?
  • 此数组包含搜索算法中分支的解长度,该算法总共搜索 15 亿个节点。目前只需要15亿中的8亿。 @ZeldaZach

标签: java byte bits


【解决方案1】:

数据类型的大小不可能小于一个字节。如果你有多个数字要存储,你可以做一个技巧:在一个字节中存储两个 4 位值。

byte storage = (byte) (((byte)myArray.length << 4) | (byte)myArray2.length);

在这里,您将两个数字存储在一个字节中。 要访问它们,请尝试:

byte myArrayLength = (byte) ((storage & 0xf0) >> 4);
byte myArrayLength2 = (byte) (storage & 0x0f);

但是通过避免类型转换,整数会是更好的解决方案

【讨论】:

    【解决方案2】:

    您可以使用字节数组,每个字节将包含两个值 - 一个在高 4 位,另一个在低位。例如。 0x1F 包含 1 和 F。并且您需要创建一个将按索引计算值的类。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2012-05-09
      • 2019-04-03
      • 1970-01-01
      • 2019-10-11
      • 2020-05-20
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      相关资源
      最近更新 更多