我试图在程序中节省一些空间,需要使用字节,我得到了一个看起来像这样的代码
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 似乎未使用。
我知道这不是一个具体的答案,但我希望它能帮助你指明正确的方向。
不过我没有看上下文源代码。