#include<stdio.h>
int main()
{
unsigned a,b,c,d;
printf("please enter a:");
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o,%d\n%o,%d",a,a,d,d);
return 0;
}
此例子为 :将一个数的4~7位取出来
运行结果为:
分析:
其中c=~(~0<<4)
j就是构造一个最后低4位为1其余位全为0 的二进制数,b得到一个a向右移动4位的数,此时低4位为需要的4~7位
d=b&c运算后就能将 我们需要的4~7位取出来了
注意负数的数移动位: 高位为1 向左移动位数后,高位分为补不补那个高位1 (补的做法叫作算术左移;高位不补1的方法叫作逻辑左移)