[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。我在哪里出错?
答案 0 :(得分:2)
position参数从最低有效位开始。换句话说,从右边而不是左边开始计数。
答案 1 :(得分:2)
您的数字第4位(大多数人称为“第3位”)的四位是1111
,因此您将获得预期的输出:
0000100011111111
^^^^ these ones
看起来像您想要的:
getBits(2303, 4, 9)