C++位域详解
来源:互联网 发布:linux命令别名 编辑:程序博客网 时间:2024/05/17 08:15
#include <stdio.h>int main(){//1.位域允许我们使用内存最小单位BIT位来存储数据,某些情况下可以为我们节省内存//2.位域是以数据类型来区分区域的,几种数据类型就表示有几个位域段( 未指定占用位,除外 )//3.同种位域类使用BIT位超过该位域数据类型大小自动完后继续占用该位域数据类型大小//4.未用完的BIT位还是要占用内存空间的即不存在只使用int类型的其中4位,后面28位还是要占用空间的//5.无法对位域成员变量取地址操作,因为我们无法取得某个BIT位的地址//6.位域一般使用unsigned数据类型//7.未指定占用位默认占用所有位数//8.位域遵循结构体对齐原则//看下面例子:struct Test{////////////////////////////////////////////////////////////////////////////第一个位域区域为int可以用空间位数为sizeof( int ) * 8 = 32位//刚好用完32位( 如果超过32位则自动往后移动32位即整个占用64位内存8字节大小 )unsigned int a:4;//占用4位( 范围 0 - 2^4 -1 )unsigned int b:5;//占用5位( 范围 0 - 2^5 -1 )unsigned int c:3;//占用3位( 范围 0 - 2^3 -1 )unsigned int d:16;//占用16位( 范围 0 - 2^16 -1 )//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////第二个位域区域为char可以用空间位数为sizeof( char ) * 8 = 8位//使用位数12位超过8位则自动往后移动8位即整个占用16位内存2字节大小 )unsigned char e:5;//占用5位( 范围 0 - 2^5 -1 )unsigned char f:7;//占用7位( 范围 0 - 2^7 -1 )//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////第三个位域区域为short可以用空间位数为sizeof( short ) * 8 = 16位//刚好用完16位unsigned short g:10;unsigned short h:6;////////////////////////////////////////////////////////////////////////////第四个位域区域为char可以用空间位数为sizeof( char ) * 8 = 8位//未指定占用位数默认占用所有位数unsigned char i;};//整个结构体位域占用4 + 2 + 2 + 1 = 9个字节//因为存在字节对齐则实际占用12个字节Test t = {};//不能这样使用//unsigned int *p = &t.a;const int size = sizeof( Test );printf( "位域大小:%d字节\n", size );return 0;}
输出结果:
0 0
- c语言位域详解
- C位域详解(转贴)
- C 位操作 详解
- c 位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- c语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- C语言位运算详解
- jsoncpp fatal error C1083: 无法打开编译器生成的文件 No such file or
- 百度地图
- 行情板块列表里面,两融标的券前面未加“融”字图标
- API Guides > Contacts Provider (二)
- region 学习(2)
- C++位域详解
- JS 实用函数 insertAfter和addLoadEvent 记录
- java的StringBuffer的细解
- 什么是凸优化问题
- 个股行情板块列表里面,两融标的券标题前面的个股代码前未加“融”字图标
- 带缓存的io与不带缓存的io
- c# 二维码生成库ThoughtWorks使用指南
- A*算法
- 分页实例(实例)