繁体   English   中英

了解Java中的字节掩码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM