Как получить значение бит в определенной позиции из байта?
Если у меня есть байт, как бы метод выглядел, чтобы получить бит в определенной позиции?
Вот что я знаю, и я не думаю, что это работает.
public byte getBit(int position) {
return (byte) (ID >> (position - 1));
}
где ID
- это имя байта, из которого я извлекаю информацию.
Ответы
Ответ 1
public byte getBit(int position)
{
return (ID >> position) & 1;
}
Сдвиг по правому краю по позиции сделает бит #позицию в самом дальнем месте справа в номере. Объединив это с побитовым И &
с 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 для установки соответствующего бита, используйте &
для побитового op.
Итак,
return ((byte)ID) & (0x01 << pos) ;
где pos
должно находиться в диапазоне от 0 до 7. Если у вас младший значащий бит как бит 1, вам нужен ваш -1
, но я бы рекомендовал против него - такое изменение позиции всегда источник ошибок для меня.