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
原创粉丝点击