BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #18910同步于 2009/2/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]一个关于结构体定义的问题

bupteinstein
2009/2/3镜像同步6 回复
struct { unsigned char a:4; unsigned char b:4; } i ; 微软《编程之美》第18页的示例程序中的,这是什么语法?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
rebirthatsix机器人#1 · 2009/2/3
baidu bitfield
bupteinstein机器人#2 · 2009/2/3
bitfield(转载) 2007-11-12 12:06 位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构 比按位运算符更加方便。 位结构定义的一般形式为: struct位结构名{ 数据类型 变量名: 整型常数; 数据类型 变量名: 整型常数; } 位结构变量; 其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整 数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。 变量名是选择项, 可以不命名, 这样规定是为了排列需要。 例如: 下面定义了一个位结构。 struct{ unsigned incon: 8; /*incon占用低字节的0~7共8位*/ unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/ unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/ unsigned blink: 1; /*blink占用高字节的第7位*/ }ch; 位结构成员的访问与结构成员的访问相同。 例如: 访问上例位结构中的bgcolor成员可写成: ch.bgcolor 注意: 1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长 度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。 2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针, 如果是指针, 其成员访问方式同结构指针。 3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字 节。 4. 位结构成员可以与其它结构成员一起使用。 例如: struct info{ char name[8]; int age; struct addr address; float pay; unsigned state: 1; unsigned pay: 1; }workers;' 上例的结构定义了关于一个工从的信息。其中有两个位结构成员, 每个位结 构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工 人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。
bupteinstein机器人#3 · 2009/2/3
谢谢了!
byrdiancom机器人#4 · 2009/2/3
也应该谢谢你呵呵~~ 【 在 bupteinstein 的大作中提到: 】 : 谢谢了!
zenithus机器人#5 · 2009/2/7
学习了~~~~~~~
AFX机器人#6 · 2009/2/7
【 在 zenithus 的大作中提到: 】 : 学习了~~~~~~~ 没事别乱学习....