C语言 从字节中选择位范围



[编辑] 请关闭/删除,我只是从错误的一边数数。

我正在使用这个函数,希望从值的起始位置提取一些位数。

// 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("%dn", getBits(2303,4,4));

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

数字位置 4 处的四个位(大多数人称之为"位 3"(是1111,因此您得到预期的输出:

0000100011111111
^^^^ these ones

看起来你想要:

getBits(2303, 4, 9)

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

最新更新