如何从一个字节获取某个位置的值?

Gle*_*654 46 java byte bit

如果我有一个字节,该方法如何在某个位置检索一个位?

这是我所知道的,我认为它不起作用.

public byte getBit(int position) {
    return (byte) (ID >> (position - 1));
}
Run Code Online (Sandbox Code Playgroud)

ID我从中检索信息的字节的名称在哪里.

Hun*_*len 94

public byte getBit(int position)
{
   return (ID >> position) & 1;
}
Run Code Online (Sandbox Code Playgroud)

按位置右移ID将使位#位于数字右侧最远的位置.将它与按位AND &与1组合将告诉您该位是否已设置.

position = 2
ID = 5 = 0000 0101 (in binary)
ID >> position = 0000 0001

0000 0001 & 0000 0001( 1 in binary ) = 1, because the furthest right bit is set.
Run Code Online (Sandbox Code Playgroud)

  • 我认为括号实际上使这个代码更清晰,并不是每个人都有记住的优先表. (6认同)

Cha*_*tin 9

你想做一点掩码并按位进行.这将最终看起来非常接近你所拥有的 - 使用shift设置适当的位,用于&执行按位运算.

所以

 return ((byte)ID) & (0x01 << pos) ;
Run Code Online (Sandbox Code Playgroud)

其中pos必须介于0到7之间.如果你的最低位为"位1"那么你需要你-1但我建议反对它 - 这种位置的改变总是导致我的错误来源.