检索存储在int的某些位中的值

5Yr*_*DBA 3 java

我们划分了一个int来保存三个值.例如,前8位(从左到右)保持一个值,第8到第12位保持另一个值,其余位保持第三个值.

我正在编写一个实用程序方法来从int的某个位范围获取值.它够好吗?你有更好的解决方案吗?startBitPos和endBitPos从右到左计数.

public static int bitsValue(int intNum, int startBitPos, int endBitPos) 
{           
   //parameters checking ignored for now        
    int tempValue = intNum << endBitPos;
    return tempValue >> (startBitPos + endBitPos); 
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我相信所有价值观都是不合情理的.

Jon*_*eet 9

不,目前这不太正确:

  • 您应该使用无符号右移运算符,以避免在不需要时使用负数结束.(当然,假设原始值是无符号的.)
  • 你没有向左移动适当的数量来清除无关的高位.

我怀疑你想要:

// Clear unnecessary high bits
int tempValue = intNum << (31 - endBitPos);
// Shift back to the lowest bits
return tempValue >>> (31 - endBitPos + startBitPos);
Run Code Online (Sandbox Code Playgroud)

就个人而言,我觉得戴上面罩和换挡感觉比双重换挡更舒适,但我发现很难想出一些像上面那样简短的东西.