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

2022-08-31 17:46:55

如果我有一个字节,该方法在某个位置检索位时会是什么样子?

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

public byte getBit(int position) {
    return (byte) (ID >> (position - 1));
}

其中 是我从中检索信息的字节的名称。ID


答案 1
public byte getBit(int position)
{
   return (ID >> position) & 1;
}

按位置向右移动 ID 将使位#position位于数字右侧最远的位置。将其与按位 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.

答案 2

你想做一个有点面具,并按位和。这最终会看起来非常接近你所拥有的 - 使用shift来设置适当的位,用于做一个按位操作。&

所以

 return ((byte)ID) & (0x01 << pos) ;

其中,范围必须在 0 和 7 之间。如果你有最不重要的位作为“位1”,那么你需要你的,但我建议不要这样做 - 这种位置的改变对我来说总是错误的根源。pos-1