Схватить двоичные биты n с конца беззнакового целого в C?Битовая маскировка? - PullRequest
0 голосов
/ 19 ноября 2018

Я довольно новичок в C и, похоже, все испортил. Насколько я понимаю, это способ получить или создать что-то из подмножества из двоичного значения.

Скажем, я хочу получить последние 8 битов беззнакового значения типа int, содержащего 00001111000011110000111100001111.

Как бы я использовал И / ИЛИ, чтобы получить последние 8?

Ответы [ 4 ]

0 голосов
/ 19 ноября 2018

Скажем, я хочу получить последние 8 битов беззнакового значения типа int, содержащего 00001111000011110000111100001111.

Как использовать И / ИЛИ для захвата последних 8?

В этом случае вы должны использовать AND.Следующий код захватит 8 младших значащих бит:

unsigned int number = 0x0F0F0F0Fu;
unsigned int mask = 0x000000FFu; // set all bits to "1" which you want to grab
unsigned int result = number & mask; // result will be 0x0000000F

Оператор & используется для операции AND с каждым битом:

    00001111000011110000111100001111
AND 00000000000000000000000011111111
------------------------------------
    00000000000000000000000000001111

Имейте в виду, что "0 И Х = 0 »и что« 1 И Х = Х ».Вы можете провести дальнейшее расследование по адресу: https://en.wikipedia.org/wiki/Boolean_algebra.

0 голосов
/ 19 ноября 2018

Маскировка всех битов > 0xff:

value & 0xffu
0 голосов
/ 19 ноября 2018

Вот более общее решение для генерации маски на основе количества интересующих вас битов.

unsigned int last_n_bits(unsigned int value, int n)
{
    unsigned int mask = -1;
    if (n < sizeof(unsigned) * CHAR_BIT)
        mask = ((1<<n)-1);
    return value & mask;
}
0 голосов
/ 19 ноября 2018

Вы можете использовать оператор BINARY AND для создания двоичной маски:

unsigned char last_eight_bits = my_number & 0b11111111
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...