从给定的编号中获取位范围

Obtaining range of bits its from a given no

我正在使用以下函数从数字中提取 n 位。我从 here 得到这个函数。为了方便,我把它贴在这里。我想获取 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

你设置的sec的位还在10-15位的位置。您需要将它们移回起点。否则,您在位置 10 处设置了一个 1,而 210 给出了 1024

的答案

sec >> 10

Demo