ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

枚举、联合、大小端的简单应用

2020-11-27 23:29:05  阅读:205  来源: 互联网

标签:int 端的 联合体 枚举 应用 printf 大小 对齐


枚举

-----------------------【列举】

*枚举类型的定义

> //枚举
enum Day
{
	Mon,				  //0
	Tues,					 //1
	Wed,					//2
	Thur,					//3
	Fri,					//4
	Sat,				    //5
	Sun						//6
};
//enum Day是枚举类型,{ }里面的内容是枚举类型可能的取值,叫做  枚举常量
//枚举常量默认值是从0开始,一次递增1;在定义的时候也可以赋初值
//eg:在定义的时候赋初值,后面会依次递增1
enum colour
{
	Red,					//0
	Orange,					//1
	Yellow = 5,				//5
	Green,					//6
	Blue,					//7
};
int  main()
{
	printf("enum Day:\n");
	printf("%d\n", Mon);			//0
	printf("%d\n", Tues);			//1	
	printf("%d\n", Wed);			//2	
	printf("%d\n", Thur);			//3
	printf("%d\n", Fri);			//4
	printf("%d\n", Sat);			//5	
	printf("%d\n", Sun);			//6
	printf("enum colour:\n");
	printf("%d\n", Red);			//0
	printf("%d\n", Orange);			//1
	printf("%d\n", Yellow);			//5
	printf("%d\n", Green);			//6
	printf("%d\n", Blue);			//7
	system("pause");
	return 0;
}

【为什么要使用枚举?】

枚举的优点:
1.增加代码的可读性和可维护性
2.和#define定义的标识符比较枚举有类型检查,更加严谨
3.防止命名污染(封装)
4.便于调试
5.使用方便,一次可以定义多个常量

联合(共用体)

***联合类型的定义:联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以,联合叫做共用体)

联合体类型的定义:
在这里插入图片描述

联合体的特点:联合的成员是共用同一块内存空间的。一个联合变量的大小至少是最大成员的大小。

union Un
{
	int i;
	char c;
};
//内部成员中的最大成员的大小是:int-----4个字节
//内部成员的最大对齐数是:int------4
//4%4==0
//联合体的大小是:4
union Un un;
int main()
{
	printf("%d\n", &(un.i));			//3572052
	printf("%d\n", &(un.c));			//3572052
	//联合体内部的所有元素共用同一块内存,并且都是从低地址开始开辟
	un.i = 0x11223344;
	un.c = 0x55;
	printf("%x\n", un.i);				//1122334455
	system("pause");					//所以,计算机存储方式是按照小端方式存储的
	return 0;
}

上面代码的图解:

1.计算机按照小端方式存储
在这里插入图片描述
2.计算机按照大端方式存储
在这里插入图片描述

联合大小的计算
1.联合的大小至少是最大成员的大小
2.当成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍
(联合体要内存对齐,联合体最终大小时:整除内部成员最大的对齐数)

//联合体大小计算:
union Un1
{
	char c[5];					//最大对齐数:1				大小:5
	int i;						//最大对齐数:4				大小:4
};
//最大成员的大小:5
//5+3才能满足可以整除最大对齐数4
//所以,联合体的总大小是:8
union Un2
{
	short c[7];				 //最大对齐数:2		    	大小:14
	int i;					 //最大对齐数:4				大小:4
};
//最大成员的大小:14
//14+2才能满足可以整除最大对齐数4
//所以,联合体的总大小是:16
int main()
{
	printf("%d\n", sizeof(union Un1));				//8
	printf("%d\n", sizeof(union Un2));				//16
	system("pause");
	return 0;
}

大小端

大小端模式的介绍:
大端存储模式:一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。(大小大:高地址、低位、大端)
小端存储模式:一个数据的低位字节序的内容放在低地址处,高位字节序存的内容放在高地址处(小小小:低位、低地址、小端)

标签:int,端的,联合体,枚举,应用,printf,大小,对齐
来源: https://blog.csdn.net/weixin_51062428/article/details/110231944

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有