Ton*_*ony 8 java binary bitmask logical-operators
我需要从长值中提取某些位范围,例如:
long input = 15367 (11110000000111)
Run Code Online (Sandbox Code Playgroud)
我需要做的是从原始long中提取两个long值,
First long is 5 bits starting from bit 0, so bits 0:4 = 7 (0111)
Second long is 56 bits starting from bit 8, so bits 7:55 = 60 (1111000)
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过位移和屏蔽来完成,但是我并不完全确定如何实现它,因此每次都是动态的,因为每次我需要这样做时,长度将会不同,特定情况也是如此比特范围.
我一直在阅读BitSets和BitArrays,但我并不完全确定这些是正确的工作.
任何关于实现这一目标的最佳方式的建议将不胜感激.
谢谢!
fge*_*fge 10
要从nrBitsoffset开始提取位offset,您可以执行以下操作:
public static long extractSub(final long l, final int nrBits, final int offset)
{
final long rightShifted = l >>> offset;
final long mask = (1L << nrBits) - 1L;
return rightShifted & mask;
}
Run Code Online (Sandbox Code Playgroud)
注意>>>右移操作员的用户; 这是因为你没有携带标志位.
至于(1L << nrBits) - 1L,就是这样2^nrBits - 1.这L是有long常数.
另请注意,没有"边界检查"(例如,偏移量或位数大于63或为负).
| 归档时间: |
|
| 查看次数: |
2883 次 |
| 最近记录: |