从字节中选择位范围

时间:2018-07-03 22:31:17

标签: c bit

[edit]请关闭/删除,我只是从错误的角度进行计数。

我正在使用此功能,希望从值的起始位置提取一些位数。

// Extract K bits from position P in the value
int getBits(int value, int k, int p)
{
   return (((1 << k) - 1) & (value >> (p - 1)));
}

当我使用int 2303(0000100011111111)测试它时,输出为15。

printf("%d\n", getBits(2303,4,4));

我正在尝试从位置4开始抓取4位以使其打印出8。我在哪里出错?

2 个答案:

答案 0 :(得分:2)

position参数从最低有效位开始。换句话说,从右边而不是左边开始计数。

答案 1 :(得分:2)

您的数字第4位(大多数人称为“第3位”)的四位是1111,因此您将获得预期的输出:

0000100011111111
         ^^^^ these ones

看起来像您想要的:

getBits(2303, 4, 9)