请教一道c的移位运算符题目

来源:百度知道 编辑:UC知道 时间:2024/06/19 19:35:26
/* getbits: get n bits from position p */
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n))
& ~(~0 << n);
}

麻烦请解释的详细点,谢谢

我以前回答的:http://zhidao.baidu.com/question/76037311.html

其中倒数第三行最后有些错误,应该是"右移将它们去掉"

从 x (二进制表示)中取第p位(从右往左数)开始的n位,返回这n位二进制所表示的数
x >> (p+1-n) 右移(p+1-n)位,把要求的第p位开始的n位移到最右边
~(~0 << n) 这个表示一个后n位为1,前面都是0的数
求与后
第p位开始的n位保持不变,前面全部为0
这样就求得了第p位(从右往左数)开始的n位,返回这n位二进制所表示的数