c语言中的位字段

[b]c语言中的位字段[/b]

比如我们想写一个这样的程序,标识一个会员的身份和服务,是否是高级会员,是否有发信服务,是否有邀请其他人权限
我们可以将这些“开关”放在一个字段里,那就是“位”的概念,每一位有两个值0和1,来表示开与关

我们可以这样写:
#define HIGHLEVEL 01
#define SENDMAIL 02
#define INVITE 04

main(){
// 不具有任何权限的会员
int flags = 0;
// 具有高级会员
flags |= HIGHLEVEL;
// 具有三个权限
flags |= HIGHLEVEL | SENDMAIL | INVITE;

// 去掉高级会员和发信权限
flags &= ~(HIGHLEVEL | SENDMAIL);

// ...
}


当然也可以用枚举:
enum {HIGHLEVEL=01,SENDMAIL=02,INVITE=04};
...


还有更高级的用法,就是标题上说的“位字段”,写法如下:
struct {

unsigned int is_highLevel:1;
unsigned int can_sendMail:1;
unsigned int can_invite:1;
}flags;
//上面定义了一个flags变量,有三个字段,冒号后的数字表示字段的宽度(二进制位数)。

main(){
// 不具有任何权限的会员
flags.is_highLevel = flags.can_sendMail = flags.can_invite = 0;
// 具有高级会员
flags.is_highLevel = 1;
// 具有三个权限
flags.can_sendMail = flags.can_invite =1;

// 去掉高级会员和发信权限
flags.is_highLevel = flags.can_sendMail =0;

//
}

定义与其他结构类似,只不过多了一个冒号,引用方式也与结构相同。
上面这种方法可以直接访问一个“字”中的位字段,位字段是字中相邻位的集合。
[i]注:字是单个的存储单元,它与具体的实现有关[/i]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值