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