枚举与联合体

枚举类型的定义

枚举类型的语法形式:

enum 枚举名称
{
  枚举元素1;
  枚举元素2;
  ......
};

枚举类型的定义:

//用枚举举例星期
enum Day//枚举的名称
{
    Mon,
    Tues,
    Wed,     // 枚举星期的所有可能
    Thur,
    Fri,
    Sat,
    Sun
};
  • 以上定义的 enum Day 是枚举类型
  • { }中的内容是枚举类型的可能取值,也叫枚举常量
  • 这些可能取值最开始都是默认从0开始,一次递增1
  • 当然在定义的时候也可以赋初值
  • 后面的枚举常量是依次递增的,也可以一个一个赋值

枚举的优点

1.代码的简洁性、增加代码的可读性和可维护性
 2.枚举 enum 和 define 对标
 3.如果不使用枚举,用 #define定义来为每个可能定义一个别名

 4.定义可能性比较多,比如:月份那代码就比较多且臃肿,如果使用枚举就会很简洁,而且增加代码的可读性和可维护性

 5.还有就是以枚举类型定义具有一定的意义
可以使用到一些程序中

enum sex
{
    MALE;
    FEMALE;
    SECRET
};
int main()
{
   enum sex a; // 定义枚举变量
   a = MALE;
   printf("%d",a);
   return 0;
}
  1. 在一些程序中枚举较define的优势
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨
  3. 防止命名污染
  4. 便于调试
  5. 使用方便,一次可以定义多个常量

枚举的使用

遍历枚举类型

在C语言中枚举类型是被当做 int 或者 unsigned int 类型来处理的
所以按照 C 语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。

联合体(共用体)union

联合体也叫共用体,是一种特殊的自定义类型
union 是联合体的关键字
这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)
联合体语法形式:
 

union ud
{
   int a;
   char b;
};

联合体的体点

联合体成员都是使用同一块空间,每次使用空间只能选一个成员使用,不能同时使用
联合的成员是共用同一块内存空间的,这样一个联合变量的大小至少是最大成员的大小

联合体成员占用同一块内存

判断当前计算机的大小端存储

用联合体来判断大小端存储

int check_sys()
{
	union s
	{
		int i;
		char c;
	}u;
	u.i = 1;
	return u.c;
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端\n");
	else
		printf("大端\n");
}

联合大小的计算

联合体也是存在对齐的

  • 联合的大小至少是最大成员的大小
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

例如:

union Un1
{
char c[5];
int i;
};
int main()
{ 
   printf("%d\n", sizeof(union Un1));
}

  • char c[ 5 ] 有5个元素是占5个空间,char 类型是 1 个字节
  • int i是整型,占 4 个字节
  • 它们的最大的对齐数是 4 ,而char c[5]所占的空间是5个, 5并不是4 的倍数
    那就在浪费掉 3 个空间找到 4 的整数倍,也就是 8      

    位运算

  • 1字节(byte) = 8 比特(bit) 

    注:这个字节与比特的关系是规定的,记住就好,通用于任何场景,容易混淆的是字长和字节,字长指的是cpu一次性能够运算的数据的位数,不同的计算机可能不一样,但是字节这个概念是恒久不变的。

    一个英文字符和英文标点占用一个字节,一个中文字符和中文标点占用两个字节。


  • 比特
      1) 计算机专业术语,是信息量单位,是由英文BIT音译而来。二进制数的一位所包含的信息就是一比特,如二进制数0101就是4比特。
      2)二进制数字中的位,信息量的度量单位,为信息量的最小单位。数字化音响中用电脉冲表达音频信号,“1”代表有脉冲,“0”代表脉冲间隔。如果波形上每个点的信息用四位一组的代码表示,则称4比特,比特数越高,表达模拟信号就越精确,对音频信号信号还原能力越强。

       按位运算

  • &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
        其中,按位取反运算符是单目运算符,其余均为双目运算符。
        位运算符的优先级从高到低,依次为~、&、^、|,
        其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值