初学者问一个C语言的问题,关于位运算。

[复制链接]
查看11 | 回复3 | 2008-9-4 12:59:45 | 显示全部楼层 |阅读模式
位域中,如:unsigned b:3;所谓的位域成员的取值范围,这里b的取值范围就是小于3比特吗?
下面这个程序里,x=%d的值是怎么来的呀?
pbit->a=0;
pbit->b&=3;
pbit->c|=1;
这些是什么意思?
多谢!多谢!
尽量清楚点。

#include "stdio.h"
struct bs
{ unsigned a:1;
unsigned b:3;
unsigned c:4;
}bit,*pbit;
main()
{
char x;
bit.a=1; bit.b=7;bit.c=15;
printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
x=0;
memcpy(&x,(char*)&bit,sizeof(char));
printf("0.x=0x%x,x=%d\n",x,x);
pbit=&bit;
pbit->a=0;
pbit->b&=3;
pbit->c|=1;
printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);
x=0;
memcpy(&x,(char*)pbit,sizeof(char));
printf("1.x=0x%x,x=%d\n",x,x);
}

回复

使用道具 举报

千问 | 2008-9-4 12:59:45 | 显示全部楼层
把一个字节分成了三个更小的部分,a一位,b三位,c四位。 pbit->a=0就是把a赋值为0; pbit->b&=3就是pbit->b=pbit->b&3,3的二进制为011,即保留二进制b的后两位; pbit->c|=1同上pbit->c=pbit->c|0001,按位与0001做"或"操作....
回复

使用道具 举报

千问 | 2008-9-4 12:59:45 | 显示全部楼层
pbit->a=0; pbit->b&=3; pbit->c|=1; 这里pbit是一个结构体,用8个位(1字节) 1-3-4分成3部分。pbit->a=0;
将第一位放1pbit->b&=3; 第2 3 4位放3(011)pbit->c|=1;第 5 6 7 8位放111115|1的值(1111 | 0001 ...
回复

使用道具 举报

千问 | 2008-9-4 12:59:45 | 显示全部楼层
随便找一本c语言看看,书上介绍的很详细...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行