C++位域详解

#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;
}

输出结果:


  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值