理解在Java中屏蔽字节

时间:2015-01-05 05:08:13

标签: java byte bytearray

我试图在程序中保存一些空间并需要使用byte,我开始使用看起来像这样的代码

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&gt;&gt; 4不应该是i&gt;&gt; 3因为每个字节是8位?我也不知道面具在做什么? 我刚刚开始使用byte,任何源代码链接都会有用

以下是一些背景信息 - Source Code

1 个答案:

答案 0 :(得分:1)

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

  • 'i'的前4位中的值表示'array'的索引。

  • 'block'的值设置为'array'中上面索引处的值。

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

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

我知道这不是一个具体的答案,但我希望有助于指出你正确的方向。

我没有查看上下文源代码。