[英]Understanding masking of Byte in 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位中的值表示要屏蔽的位索引(如果“ block”中该索引处的位为1,则该函数将返回true)。
注意:“ i”的位0似乎未使用。
我知道这不是一个具体的答案,但我希望它能为您指明正确的方向。
我没有看上下文源代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.