指定struct成员变量的位数
来源:互联网 发布:全国人口普查主要数据 编辑:程序博客网 时间:2024/05/22 10:31
在定义结构体的时候,我们在指定成员变量的类型的同时也可以指定成员变量所占的位数,其定义形式为:
struct teststruct{ 类型1 成员1 :成员1所占位数; 类型2 成员2 :成员2所占位数; 类型3 成员3 :成员3所占位数; ......};
虽然拆分基本成员变量在语法上是得到支持的,但是并不等于我们想怎么分就怎么分,例如下面的拆分显然是不合理的:
struct student { unsigned short sex : 1; unsigned short age : 12; };这是因为 1+12 = 13(但是这个结构所占的空间很可能是2个字节而不是13位),不能再组合成一个基本成员,不能组合成 char、int 或任何类型, 拆分的位数应该是合乎逻辑的,应仍然可以组合为基本成员变量 (这个和编译器的字节对齐属性有关)。
测试代码:
#include <stdio.h>typedef struct teststruct{ unsigned int val1 : 1; unsigned int val2 : 2; unsigned int val3 : 29;}TS;int main(){ TS tmp; printf("size of TS: %d\n",sizeof(tmp)); printf("size of unsigned int: %d\n",sizeof(unsigned int)); tmp.val1 = 2; tmp.val2 = 5; tmp.val3 = 999; printf("val1:%d,val2:%d,val3:%d\n",tmp.val1,tmp.val2,tmp.val3); system("pause"); return 0;}
输出:
size of TS: 4
size of unsigned int: 4
val1:0,val2:1,val3:999
val1只占一位,2的二进制为10,故而val1的值为0,val2同理。
参考:http://www.cnblogs.com/mashang/archive/2011/03/24/1993513.html
- 指定struct成员变量的位数
- C - 指定结构体中成员变量的位数
- struct成员变量
- struct device的成员变量bus_id到哪里去了?
- 详解struct、class中成员变量的字节对齐
- 与struct相关的宏定义(成员变量偏移和获取struct起始地址)
- 与struct相关的宏定义 --- 根据成员变量偏移,获取struct起始地址
- struct的成员对齐
- struct的成员对齐
- struct的成员对齐
- struct的成员对齐
- struct的成员对齐
- struct的成员对齐
- struct的成员对齐
- struct 的匿名成员
- C/C++ 结构体的一个高级特性 ―― 指定成员的位数
- C/C++结构体的一个高级特性――指定成员的位数
- C/C++ 结构体的一个高级特性 ―― 指定成员的位数
- 程序员技术练级攻略
- 【引用】异步IO、APC、IO完成端口、线程池与高性能服务器
- GNU/Linux下有多少是GNU的?
- 【引用】很幽默的讲解六种Socket IO模型
- 选项卡控件SDK程序
- 指定struct成员变量的位数
- 如何更好阅读源代码 .
- 写在前面的一些话:《Learning OpenCV》中文版 .
- IOS中定义全局变量
- 采用Filter统一控制字符集
- 采用java和数据库两种方式进行加锁
- 终于解决了fedora16部分网页打不开的问题
- 如何提高阅读源代码的效率 .
- 《暗时间》读后感