[编辑] 请关闭/删除,我只是从错误的一边数数。
我正在使用这个函数,希望从值的起始位置提取一些位数。
// 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 参数从最低有效位开始。 换句话说,从右边算,而不是从左边算。