Подтвердить что ты не робот

Как получить значение бит в определенной позиции из байта?

Если у меня есть байт, как бы метод выглядел, чтобы получить бит в определенной позиции?

Вот что я знаю, и я не думаю, что это работает.

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

где ID - это имя байта, из которого я извлекаю информацию.

4b9b3361

Ответ 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, но я бы рекомендовал против него - такое изменение позиции всегда источник ошибок для меня.