как извлечь 5-й бит байта в c# - PullRequest
2 голосов
/ 28 февраля 2020

Если у меня есть десятичное число 12, его представление в двоичном виде равно 00001100. Как извлечь пятый бит, который в данном случае равен 1? Я пытался сместить влево на 4 и AND -ing с 1, но это не правильно . Может кто-нибудь сказать мне, что я делаю не так?

player = low << 4 & 1;

Ответы [ 3 ]

3 голосов
/ 28 февраля 2020

Вы действительно хотите получить 3-й бит (начиная с правый конец ):

 00001100
     ^
     3d from the right end (bits are zero based)

Все, что вам нужно сделать, это избавиться от 3 младших битов (100) с помощью >> и проверьте следующий бит:

 // 1 if 3d bit is set, 0 otherwise
 player = (low >> 3) & 1;

Или, если у вас есть номер 5 - индекс с левого конца и предполагая, что low является byte:

 player = (low >> (sizeof(byte) * 8 - 5)) & 1;
1 голос
/ 28 февраля 2020

Вам нужно сдвинуть влево единицу и & с вашей переменной.

player = (1 << 4) & low;

Это даст вам 5-й бинарный ди git с конечными нулями.

player = ((1 << 4) & low) >> 4;

Это дает точный 5-й двоичный код Di git, удаляя завершающие нули.

0 голосов
/ 28 февраля 2020

Вместо сдвига битов вы можете просто использовать побитовое AND. Как говорили другие, вы смотрите на 3-й бит справа (от нуля), другими словами, на бит, который представляет 2 ^ 3.

player = (low & 8) / 8;

Более общее решение c будет be

private int GetBit(int number, int bit) => (number & (1 << bit)) / (1 << bit);

Примечание. Для этого необходимо привести decimal к int, поскольку & не работает с decimal s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...