summary.txt
来自「This my summarize of weiyu」· 文本 代码 · 共 77 行
TXT
77 行
//CTest.cpp : 定义控制台应用程序的入口点。
//2005-4-12
//结构体中的位域(位段)
#include "stdafx.h"
struct mybitfields1
{
unsigned short a:7; //2个字节
char b:2; //2个字节(使用一个,另一个被浪费)
int c:4; //4个字节
unsigned short d:16; //2个字节
unsigned short e:16; //2个字节
unsigned short f:5; //4个字节(找到最近一种不同于自己的类型(int),开辟4个字节,使用2个,另2个被浪费)
int g:4; //4个字节
}test1;
struct mybitfields2
{
unsigned long s:10; //4个字节
char t:4; //4个字节(使用一个,浪费三个)
} test2;
struct mybitfields3
{
char x:4; //4个字节(使用一个,浪费三个)
unsigned long y:10; //4个字节
} test3;
struct mybitfields4 //注意:这个结构体中的所有元素类型一致(个人理解为它们之间的关系为:能挤就挤)
{
unsigned short i:4;
unsigned short j:5;
unsigned short k:7;
} test4;
void main()
{
printf("%d\n", sizeof(test1)); //输出为20
printf("%d\n", sizeof(test2)); //输出为8
printf("%d\n", sizeof(test3)); //输出为8
int p;
test4.i = 2;
test4.j = 3;
test4.k = 4;
p = *((short*)&test4);
printf("%d\n", p); //输出为2098(内存如例1所示);如果j的位域改为6,输出为50(内存如例2所示)
printf("%d\n", sizeof(test4)); //输出为2,如果j的位域改为6,输出为4
}
/*
例1:
0011/0010
0000100/0
共2个字节,其中:a(0010); b(00011); c(0000100)
例2:
0011/0010
000000/00
0/0000100/
000000000
共4个字节,其中:a(0010); b(000011); c(0000100)
与例1不同的是,在例1中,c(位域为7)刚好补齐a和b占位后留下的7位。
而在例2中,a和b占位后只留下的6位,必须另行开辟2个字节的空间,系统认为没有必要再让c去和a,b挤在一起,
c可以存放到新开辟的空间里,供以后查找方便。(系统是怎么想的,我不知道,完全是个人看法)
*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?