Получение диапазона битов по заданному номеру - PullRequest
0 голосов
/ 05 марта 2019

Я использую следующую функцию, чтобы извлечь n бит из числа.Я получил эту функцию от здесь .Для удобства я выкладываю это здесь.Я хотел бы получить биты от 0 до 9, а затем в другом операторе биты от 10 до 15. Я передаю 1033. Я получаю правильное значение битов от 0 до 9, но неправильное значение для 10-15. Вместо этого я должен получить 1я получаю 1024 любые предложения?

 unsigned createMask(unsigned a, unsigned b)
    {
        unsigned r = 0;
        for (unsigned i = a; i <= b; i++)
            r |= 1 << i;

        return r;
    }

Теперь у меня есть это

unsigned short langId = 1033 ;// 10000001001
unsigned primary =   createMask(0,9) & langId; //gives 9 correct
unsigned sec = createMask(10,15) & langId;     //gives 1024 incorrect should be 1

1 Ответ

0 голосов
/ 05 марта 2019

Установленные вами биты sec все еще находятся в 10-15 битовых позициях.Вы должны сдвинуть их назад к началу.В противном случае у вас есть один 1, установленный в позиции 10, и 2 10 дает ваш ответ 1024

sec >> 10

Демо

...