当前位置:网站首页>位段-C语言
位段-C语言
2022-08-04 05:31:00 【crazy__xieyi】
位段是可以用来节省空间的
位段的声明和结构是类似的,有两个不同:
1.位段的成员必须是int、unsigned int 或signed int 。
2.位段的成员名后边有一个冒号和一个数字。
比如:
struct A
{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};
1.位段的内存分配
1. 位段的成员可以是int unsigned int signed int 或者是char (属于整形家族)类型
2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。
3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
struct S
{
char a:3;
char b:4;
char c:5;
char d:4;
};
struct S s = {0};
s.a = 10;
s.b = 12;
s.c = 3;
s.d = 4;
空间是如何被开辟的呢?

2.位段的跨平台问题
1. int 位段被当成有符号数还是无符号数是不确定的。
2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机
器会出问题。
3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是
舍弃剩余的位还是利用,这是不确定的。
总之,跟结构相比,位段可以达到同样的效果,虽然可以很好的节省空间,但是有跨平台的问题存在。
边栏推荐
猜你喜欢
随机推荐
MVC自定义配置
Tencent and NetEase have taken action one after another. What is the metaverse that is so popular that it is out of the circle?
典型CCN网络——efficientNet(2019-Google-已开源)
target has libraries with conflicting names: libcrypto.a and libssl.a.
Machine Learning - Processing of Text Labels for Classification Problems (Feature Engineering)
Introduction to Convolutional Neural Networks
Chapter One Introduction
Object.requireNonNull 方法说明
管道重定向
如何用Pygame制作简单的贪吃蛇游戏
彻底删除MySQL教程
tmux concept and usage
Deep Learning Theory - Initialization, Parameter Adjustment
CSDN大礼包--高校圆桌派大礼包
arm交叉编译
语音驱动嘴型与面部动画生成的现状和趋势
LeetCode_Dec_1st_Week
target has libraries with conflicting names: libcrypto.a and libssl.a.
迅雷关闭自动更新
[日常办公][ssh]cheatsheet









