从给定的编号中获取位范围
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
我正在使用以下函数从数字中提取 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