位段、位段计算大小、枚举、联合
来源:互联网 发布:成都病假条淘宝 编辑:程序博客网 时间:2024/05/16 18:04
- 位段:成员必须是int 、unsigned int 和signed int .
位段的成员名后边有一个冒号和一个数字。 - 计算:位段是按比特位的大小来进行计算的,比如一个字节有8个比特位,存入的时候根据数据类型的不同计算出相应的比特位依次往后存储,若存储不下则开辟下一个字节
eg: struct s { int _a:4; int _b:5; int _b:6; int _b:30; }; s就是一个位段类型 printf("%d\n",sizeof(struct S));//8 分析:int 型具有四个字节,共32个比特位,故存储时将前三个放入第一块空间中,由于第四个是30个比特位存储不下,因此开辟下一快空间存储,即开辟了两快空间,就是好8个字节。其他类型同理可得。
和结构相比,位段可以达到同样的效果,但是可以很好的节省空间,但是有跨平台的问题存在。
跨平台问题:
1)int 位段被当成有符号数还是无符号数是不确定的;
2)位段中最大的数目不能确定。(16位机器最大16,32位机器最大32)
3)当一个结构包含两个位段,第二个位段成员比较大,无法容纳第一个位段剩余的位时,是舍弃剩余的位还是利用,不确定。
枚举:一 一列举
eg:enum game{Start=2;Play;//3End//4};枚举常量默认值从0开始,依次递增一,在定义时也可赋初值。enum game clr=play;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。clr=5; //ok?没有实际的意义。
联合(共用体)
是一种特殊的自定义类型,特征是这些成员公用同一块空间(所以联合也叫共用体)。
union Un { char c; int i; }; union Un A; printf("%d\n",sizeof( A));//4
面试题:判断当前计算机的大小端存储。
eg:>union Un { char c; int i; }; union Un A; A.i=0x11223344; A.c=0x55; printf("%x\n",A.i);//11223355 说明是小端存储
*小端存储是低字节序存在低地址处,故44被55取代;
大端存储是高字节序存在低地址处,故11倍55取代。*
联合体大小的计算:
“`
union Un
{
char c[5];
int i;
};printf("%d\n",sizeof(union Un));//8
“`最大成员大小为5,最大对齐数为4,要对齐到最大对齐数的整数倍,故为8
阅读全文
0 0
- 位段、位段计算大小、枚举、联合
- 浅谈 位段?枚举?联合?
- 结构体大小的计算、联合、位段
- 位段与联合,枚举类型
- 总结结构体枚举联合位段
- 结构体、位段、枚举、联合
- 位段和联合
- 自定义类型(结构体、位段、枚举和联合)
- 自定义类型:结构体,位段,枚举,联合
- 自定义类型(结构体,枚举,联合,位段)
- 自定义类型(结构体,位段,枚举,联合)总结
- Pace 12 (自定义类型:结构体 位段 枚举 联合)
- 自定义类型部分知识写一篇博客。 知识点: >结构体类型创建 >结构体初始化 >结构体内存对齐 >位段,位段计算机大小。 >枚举+联合。
- 结构体和位段的大小计算
- 位段
- 位段
- 位段
- 位段
- 自定义类型:结构体,位段,枚举,联合
- 【剑指offer]输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
- uploadify上传插件完整Demo(包括后台)
- java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流
- window系统提交svn报目标名或卷名不正确,无法清理
- 位段、位段计算大小、枚举、联合
- 同源政策
- Java面试题全集(上)
- spark--集合操作示例
- 数学分析 复合函数求导法则
- 云服务器上部署个虚拟机
- python json.dump()与json.load()
- Python笔记
- 角色换装