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 + -
显示快捷键?