了解 Java 中字节的掩码



我试图在程序中节省一些空间,需要使用字节,我得到了一个看起来像这样的代码

private static final long MAX = 1000000000L;
private static final long SQRT_MAX = (long) Math.sqrt(MAX) + 1;
private static final int MEMORY_SIZE = (int) (MAX >> 4);
private static byte[] array = new byte[MEMORY_SIZE];
private void getbit(Long i)
{
byte block = array[(int) (i >> 4)];
byte mask = (byte) (1 << ((i >> 1) & 7));
return ((block & mask) != 0);
}  

我不明白这意味着什么?在块中,为什么我们使用 i>> 4 不应该是 i>> 3,因为每个字节都是 8 位?我也不知道口罩在做什么?我刚刚开始使用字节,任何指向源的链接都会有所帮助

这是一些上下文 - 源代码

关于"i"的最低 8 位,这是我可以收集的(其中 MSB 是位 7,LSB 是位 0):

    "
  • i"前 4 位中的值表示"数组"的索引。

  • "
  • 块"的值设置为位于"数组"中上述索引的值。

  • "
  • i"的第 1-3 位值表示要屏蔽的位索引(如果"块"中该索引处的位为 1,则该函数将返回 true)。

  • 注意:"i"的位 0 似乎未使用。

我知道这不是一个具体的答案,但我希望它能帮助你指明正确的方向。

不过我没有看上下文源代码。

最新更新