位段【C语言】-创新互联

目录

10年积累的网站建设、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有兴隆免费网站建设让你可以放心的选择与我们合作。

一、什么是位段

二、位段的内存分配

三、位段的跨平台问题

四、举例


一、什么是位段

位段的声明和结构体类似,但有两个不同:

1、位段的成员必须是int、unsigned int或signed int(char其实也可以)

2、位段的成员名后边有一个冒号和一个数字。

eg:

struct A
{
    int a:2;
    int b:5;
    int c:10;
    int d:30;
};

A就是一个位段类型

那位段A的大小是多少呢?这就不得不先讲讲位段的内存分配问题。

二、位段的内存分配

1、位段的成员可以是unsigned int,signed int或char

2、位段空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的。

3、位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。

三、位段的跨平台问题

1、int位段被当成有符号数还是无符号数是不确定的。

2、位段中大位的数目不能确定。(16位机器大16,32位机器大32,写成27,在16位机器下就会出问题)

3、位段中的成员在内存中从左向右分配还是从右向左分配标准尚未定义。

4、当一个结构体包含两个位段,第二个位段成员比较大,无法容纳第一个位段剩余位时,是舍弃剩余位还是利用,这是不确定的。

四、举例

在vs2019环境下举例:首先,int是32bit的,a占了2bit,b占5bit,c占10bit

然后,这32字节就只剩下15个bit了,不够30bit,所以,再拿32bit给d,struct

A就总共占8字节(64bit)。

struct A
{
    int a:2;
    int b:5;
    int c:10;
    int d:30;
};

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:位段【C语言】-创新互联
网址分享:http://ybzwz.com/article/escch.html