作业帮 > 综合 > 作业

关于位域运算 麻烦帮解释下下列程序

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 09:22:54
关于位域运算 麻烦帮解释下下列程序
#include
void main()
{
struct bs
{
unsigned a:1;
unsigned b:3;
unsigned c:4;
} bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
pbit=&bit;
pbit->a=0; //此后三行是什么意思
pbit->b&=3;
pbit->c|=1;
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);
}
还有这个程序
#include
void main(){
char a='a',b='b';
int p,c,d;
p=a;
p=(p8;
printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
}
我不知道为什么c的输出值为97?
pbit结构bs的指针,指向bit首地址,pbit->a相当于bit.a
这三句分别是将0值赋给bit.a、将bit.b的值与3按位与、将bit.c的值与1按位或
00000111 & 00000011 = 00000011 = 3
00000100 | 00000001 = 00000101 = 5
a、b字符存储ASCII码,相当于整型的97和98,二进制分别为1100001和1100010
p
再问: #include void main(){ char a='a',b='b'; int p,c,d; p=a; p=(p8; printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d); } 我不知道为什么c的输出值为97?
再答: a、b字符存储ASCII码,相当于整型的97和98,二进制分别为1100001和1100010 p8 = 0110000100000000>>8 = 1100001 = 97 这个解释还不够清楚吗,1100001是二进制码,换算成十进制是97 换算方法是1*2^6 + 1*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 64+32+0+0+0+0+1=97 再细讲我也不能了