Сдвиг битов и маскировка - PullRequest
1 голос
/ 06 апреля 2020

У меня вопрос, я не очень хорош, если речь идет о низкоуровневом программировании, поэтому быстрый вопрос, у меня есть байт, и каждые 2 бита в этом байте означают что-то, например:

мой байт равен 204, поэтому быть 1100 1100 в соответствии с калькулятором, поэтому

bits 0..1 mean status of type 1
bits 3..2 mean status of type 2
bits 5..4 mean status of type 3
bits 7..6 mean status of type 6

Итак, чтобы проверить все значения, которые я использую:

var state = 204
var firstState = (state >> 0) & 2
var secondState = (state  >> 2) & 2
var thirdState = (state >> 4) & 2
var fourthState = (state >> 6) & 2

Но это выглядит странно, я жду результатов
firstState = 0 secondState = 3 thirdState = 0 четвертое состояние = 3, но я получаю 0,2,0,2. Так что я делаю не так?

1 Ответ

4 голосов
/ 06 апреля 2020

Вам нужно маскировать 3 (11 в двоичном), а не 2 (10 в двоичном):

var state = 204;
var firstState = (state >> 0) & 3;
var secondState = (state  >> 2) & 3;
var thirdState = (state >> 4) & 3;
var fourthState = (state >> 6) & 3;

При маскировании операция применяется к биту в соответствующем месте в каждом значении, итак:

And 
11001100  (204) 
00000011  (3)
-------- 
00000000  (0)

и

And 
00110011  (51) 
00000011  (3)
-------- 
00000011  (3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...