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

问题描述 投票:1回答:1

我使用以下函数从数字中提取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
c++11 bit-manipulation bitmask
1个回答
1
投票

你设置的sec位仍然在10-15位。你需要将它们重新开始。否则你有一个1设置在位置10和210给你的答案1024

sec >> 10

Demo

© www.soinside.com 2019 - 2024. All rights reserved.