请帮忙解释一个c程序

来源:百度知道 编辑:UC知道 时间:2024/05/14 20:05:53
题目:取一个整数a从右端开始的4~7位。
程序分析:可以这样考虑:
(1)先使a右移4位。
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4)
(3)将上面二者进行&运算。
2.程序源代码:
#include "stdio.h"
void 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);//?
}

void main()
{
unsigned a,b,c,d;//申明类型,无符号整形
scanf("%o",&a);//八进制输入,比如75,就是0011 1101
b=a>>4;//右移四位,变成0000 0011
c=~(~0<<4);//变成0000 1111
d=b&c;//就是0000 0011
printf("%o\n%o\n",a,d);//输出 d就是a的从右端开始的4~7位
}

#include "stdio.h"
void main()
{
unsigned a,b,c,d;//无符号数
scanf("%o",&a);//输入到a
b=a>>4;//这里就不解了,不是取右端4位么,怎么是取左端4位呢?反正这里高4位移到低4位上
c=~(~0<<4);//制作掩码,~0=1111 1111 ~0<<4=1111 0000 ~(!0<<4)=0000 1111
d=b&c;//位操作,掩去高4位
printf("%o\n%o\n",a,d);//输出
}