栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言之结构体冒号作用(五十一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言之结构体冒号作用(五十一)

结构体中的冒号表示位域。
位域:

由于某些信息的存储表示只需要几个bit位,就可以表示而不需要一个完整的字节,同时也是为了节省存储空间和方便处理。

struct  Bit
{
    int  a:3;
    int  b:5;
    int  c:7;
}bit;

说明:

1、位域必须存储在同一个类型中,不能跨类型,同时也说明位域的长度不会超过所定义类型的长度。如果一个定义类型单元里所剩空间无法存放下一个域,则下一个域应该从下一单元开始存放。例如:所定义的类型是int类型,一共32为,目前用掉了25位还剩下7位,这时要存储一个8位的位域元素,那么这个元素就只能从下一个int类型的单元开始而不会在前面一个int类型中占7为后面的int类型中占1位。

2、如果位域的位域长度为0表示是个空域,同时下一个域应当从下一个字节单元开始存放。

3、使用无名的位域来作为填充和调整位置,切记该位域是不能被使用的。

4、位域的本质上就是一种结构体类型,不同的是其成员是按二进制位来分配的。

 

1.结构体中unsigned int类型 

#include 
using namespace std;

typedef struct Bit{
	unsigned int a:1; //0000 0001 = 1;占1bit,超出的部分为0,没有超出的部分,正常计算即可。
	unsigned int b:3; //0000 0111 = 7; 占3bit,没有超出的部分,正常计算即可。
	unsigned int :0;  //0   = 0
	unsigned int d:6; //0011 1111 = 64;占6bit,没有超出的部分,正常计算即可。
} Bit;

int main(int argc, char *argv[]){
	Bit bit;
	cout << "sizeof(Bit) = " << sizeof(Bit) << endl;//a(bit) + b(3bit) + d(6bit);a+b = 1byte; d = 1byte
	
	bit.a = 2;   //10
	cout< 

2.结构体中int类型 

#include
#include 

using namespace std;
typedef struct Bit{   
	int x:5;//0001 1111   
	int y:2;//0000 0011
}Bit;

int main(){    
	Bit bit;
	cout << "len = " << sizeof(Bit)<< endl;//4

	bit.x = 3;//0000 0101
	cout <<"bit.x = "<< bit.x <#include
#include 

using namespace std;
typedef struct Bit{   
	int x:1;//0000 0001
	int y:2;//0000 0011
}Bit;

int main(){    
	Bit bit;
	cout << "len = " << sizeof(Bit)<< endl;//4

    //如果int类型定义为int x:1, 最高位1为负号,为-1
	bit.x = 1;//0000 0001
	cout <<"bit.x = "<< bit.x <
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号