位段的深度剖析和存储方法,位段理解方法

简介: 位段的深度剖析和存储方法,位段理解方法
//位段----结构体实现位段的能力:
//位段和结构体类似,但是两个不同:
//1.位段的成员必须是int,unsigned int或signed int
//2.位段的成员后面有一个冒号和一个数字
//struct A      结构体                   struct A        位段
//{                                     {
//    int_a;                                 int _a:2;
//    int_b;                                 int _b:5;
//    int_c;                                 int _c:10;
//    int_d:                                 int _d:30;
//};                                    };
//上面的位段    -----一定程度上节省空间     ----4字节最大32bit,不能放置32以上的
//struct A
//{  //int型开辟4个字节---32bit
//    int _a : 2;//32-2=30
//    int _b : 5;//30-5=25
//    int _c : 10;//25-10=15
//    int _d : 30;//15不够,重新开辟4个字节,放置30bit,但是这30不要求掌握是15的还是32的
//};
//int main()
//{
//    printf("%d\n", sizeof(struct A));//8----8字节
//    return 0;
//}
//在vs里怎么存储的呢
//struct S
//{
//    char a : 3;
//    char b : 4;//a占3bit,b占4bit,放在1个字节中
//    char c : 5;//c占5bit,d占4bit,不能放一个字节中,分开放
//    char d : 4;//所以类似为3个字节,分别为00000000  00000000  00000000
//};
//struct S
//{
//    struct S s = { 0 };
//     s.a = 10;//把a的3个bit放10->1010(二进制),但是只能放3个010
//    s.b = 12;//把b的4个bit放12->1100(二进制),放1100
//    s.c =3;//把c的5个bit放3->00011(二进制),放00011
//    s.d =4;//把d的4个bit放4->0100(二进制),放0100
//    return 0;
//};//在vs编译器内,内存先使用低比特的数据,在使用高比特位,ab按顺序从右向左使用,(先放右在放左)

使用后变为0(空置放0)1100(b) 010(a)         000 00011(c)     0000 0100(d)

即内存中为01100010  00000011  00000100(16进制)

即         6     2   0    3     0   4

//int main()
//{
//    
//    return 0;
//}
相关文章
|
6月前
|
编译器 Linux C语言
详解结构体内存对齐及结构体如何实现位段~
详解结构体内存对齐及结构体如何实现位段~
|
5月前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
51 0
|
5月前
|
存储 编译器 C语言
C语言的联合体:一种节省内存的数据结构
C语言的联合体:一种节省内存的数据结构
|
6月前
|
存储 编译器 C语言
【C语言】深度剖析数据在内存中的存储
【C语言】深度剖析数据在内存中的存储
|
6月前
|
存储 设计模式 编译器
【C/C++ 基础知识】this指针是如何存储的?
【C/C++ 基础知识】this指针是如何存储的?
83 1
|
6月前
|
存储 小程序 C语言
【深度剖析数据在内存中的存储】C语言
【深度剖析数据在内存中的存储】C语言
|
存储 C语言
C语言——带你深度剖析数据在内存中的存储(下)
C语言——带你深度剖析数据在内存中的存储(下)
|
存储 编译器 C语言
带你深度剖析《数据在内存中的存储》——C语言
我们知道一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。那变量是以什么方式存储的呢?整型和浮点型的在内存中存储的方式一样吗?这篇文章会给出答案的。
110 0
|
存储 编译器 C语言
深度剖析数据在内存中的存储(C语言)
计算机中对整型数据的存储采用二进制(注意计算机中数据都存为补码的形式) 原码:将数值翻译成二进制就是原码 反码:正数同原码,负数符号位不变,其他位取反,0变1,1变0 补码:正数同原码,负数为其反码+1
90 0
|
存储 编译器 C语言
聊一聊C语言位域/位段
这样定义结构体变量是什么意思呢? 主要原因是:有些信息在存储时,只需占几个或一个二进制位(bit),并不需要占用一个完整的字节。例如,在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言提供了一种数据结构,称为“位域”或“位段”。