`
clouisandy
  • 浏览: 19782 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

c语言中的位字段

阅读更多
c语言中的位字段

比如我们想写一个这样的程序,标识一个会员的身份和服务,是否是高级会员,是否有发信服务,是否有邀请其他人权限
我们可以将这些“开关”放在一个字段里,那就是“位”的概念,每一位有两个值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;

	// 
}

定义与其他结构类似,只不过多了一个冒号,引用方式也与结构相同。
上面这种方法可以直接访问一个“字”中的位字段,位字段是字中相邻位的集合。
注:字是单个的存储单元,它与具体的实现有关
分享到:
评论

相关推荐

    c语言中位字段与结构联合的组合使用详解

    本篇文章是对c语言中位字段与结构联合的组合使用进行了详细的分析介绍,需要的朋友参考下

    解析C语言中位字段内存分配的问题

    C语言的位字段是个比较有意思的特性。它的目的是在一个机器字中保存多个对象(每个对象占据若干bit),从而节省内存资源,同时又避免复杂的位运算。在此不再讨论位字段的具体语法,下面将研究位字段的存储特性。 先...

    分治法求最大字段和问题——C语言代码

    课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的

    C语言头文件 QOS C语言头文件 QOS

    C语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言头文件 QOSC语言...

    C语言-对一个结构体中的字段进行排序

    定义一个数组(学生结构体数组),里面包含学号、姓名、身份证和三科学生成绩,要求写一个函数,根据学生任何一个字段(如学号、姓名、身份证),进行排序。

    C语言操作JSON

    利用C语言操作JSON,运行在Linux下,实现对JSon数据的操作。

    C语言银行系统管理,简易版,读写文件

    第一个字段是帐号,帐号是唯一的5位非负整数,且不小于1000 第二个字段是所有者名,包含1到10个字母(没有数字或特殊字符)。 第三个字段是帐户余额,它是一个具有两位小数的非负数。 银行联户按园账号升序排列。 您...

    嵌入式c语言设计(经典)

    在单片机应用中,位操作(特别是对引脚的位操作)非常普遍,如EEPROM数据和IC卡数据的读写、字段式LCD显示等,很多带串口的集成电路都需要单片机用软件来做I/O口读写程序。如何让这些子程序既有很好的通用性,生成...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    9.8 位字段 9.9 例子:访问位和字节 9.10 adt堆栈 9.11 总结 9.12 练习 第10章 结构和列表处理 10.1 自引用的结构 10.2 线性链表 10.3 链表操作 10.4 一些链表处理函数 10.4.1 插入 10.4.2 删除 10.5 堆栈 10.6 例子...

    cJSON 一个c语言处理Json的代码

    cJSON 一个c语言处理Json的代码

    C语言入门经典(第4版)--源代码及课后练习答案

    11.2.5 结构中的位字段 423 11.3 结构与函数 424 11.3.1 结构作为函数的变元 424 11.3.2 结构指针作为函数变元 425 11.3.3 作为函数返回值的结构 426 11.3.4 修改程序 430 11.3.5 二叉树 433 11.4 共享内存 ...

    C语言讲义.doc

    4.1.4 指定结构体元素的位字段 72 4.1.5 结构数组 72 4.1.6 嵌套结构 73 4.1.7 结构体的赋值 73 4.1.8 指向结构体的指针 73 4.1.9 指向结构体数组的指针 73 4.1.10 结构中的数组成员和指针成员 73 4.1.11 在堆中创建...

    C语言自动分析HL7消息的片断和字段结构

    仿照hl7send例子进行程序设计, 要求通过程序打开HL7消息文件,自动分析出消息的片断和字段结构。 现存在一hl7文件 hl7.txt ,现要求编一个C/C++/C#/JAVA程序,打开该文件后,自动分析结构

    凯撒密码C语言

    C语言上的凯撒密码实现。包括加密。解密。简单易懂

    基于C语言的仓库管理系统

    基于C语言的仓库管理系统;物品可增加、删除、查找、修改;使用通用数据类型,可修改少量代码用为其他管理系统

    C语言函数sizeof

     注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。   如sizeof(max)若此时变量max定义为...

    MySQL使用select语句查询指定表中指定列(字段)的数据

    本文介绍MySQL数据库中执行select查询语句,查询指定列的数据,即指定字段的数据,需要的朋友可以参考下

    宿舍信息管理系统-C语言

    实现某个宿舍楼的宿舍信息管理。每个宿舍基本信息包括:楼层号、房间号、面积、可住宿人数、实际住宿人数、修缮状况(良好/待维修)。...7、排序:根据给定字段,对记录进行排序 改成.cpp后缀即可在C++环境下运行。

Global site tag (gtag.js) - Google Analytics