位移问题
题目:取一个整数a从右端开始的4~7位程序源代码:
main()
{
unsigned a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o\n%o\n",a,d);
}
这段代码怎么理解,麻烦各位大侠了!
main() { unsigned a,b,c,d; scanf("%o",&a); /* 如输入:242 (这是八进字,二进字是:0000 0000 1010 0010) */ b=a>>4; /* a右移4位后给b,二进字为:0000 0000 0000 1010 */ c=~(~0<<4); /* ~0取反后,二进字都是1,左移4位后 1111 1111 1111 0000 , 接着再取反就是:0000 0000 0000 1111 赋给c */ d=b&c; /* b和c按位与给d后为:0000 0000 0000 1010 */ printf("%o\n%o\n",a,d); }输出为: