枚举的定义和使用,位域相关知识

本文介绍了C/C++中的枚举类型,包括其特点(有符号、整型值、类型安全)、定义方式、赋值规则以及枚举在编程中的优点,如增强代码可读性、类型检查和调试便利性。通过实例演示如何用枚举替代bool类型并展示了位域的概念。
摘要由CSDN通过智能技术生成

 1、

枚举类型:即列举

 枚举类型的特点:

(1) 枚举类型是一个受到限制的有符号的类型;

(2)枚举值(元素)必须是整型值(有符号);//char 类型可以是‘A’,short类型可以,不允许字符串“abc”,float   double 指针

(3)枚举变量的取值必须在枚举值的集合中;

注:给枚举值赋的值可以重复,但枚举值(元素)不可以重复

枚举的优点:

(1)增加代码的可读性和可维护性;

(2)和宏不同,枚举有类型检查更安全;

(3)封装性好;

(4)便于调试;

(5)使用方便,一次可以定义多个变量;

2、定义

enum+名字+{变量};

eg:      enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun};
//不指定值,枚举值默认从0开始,往后逐个递增+1

enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun};
//不指定值,枚举值默认从0开始,往后逐个递增+1
int main()
{
	enum Week day = Mon;
	printf("%d\n", day);
	return 0;
}

结果: 

enum Week{Mon=1,Tue=2,Wed=3,Thu=4,Fri=5,Sat=6,Sun=7};

//全部给值,枚举值为给定的值

enum Week{Mon,Tue,Wed=5,Thu,Fri=8,Sat,Sun};

//可以给一部分,没给的枚举值等于前一个值+1,第一个值默认为0;

3、枚举实例应用

在C89中没有bool类型,可以用枚举来写

typedef enum { TRUE = 1, FALSE = 0, PIR_NULL = -1 } My_Bool;//定义一个枚举,取别名为My_Bool
My_Bool Finf_ArrVal(int* arr, int len, int val)//找数组中的一个数val
{
	if (arr == NULL)
	{
		return PIR_NULL;
	}
	for (int i = 0; i < len; i++)
	{
		if (val == arr[i])
		{
			return 1;
		}
	}
}

4、位域

//位段:位域
struct A
{
	char a : 3;//代表占3个位,有符号
	char b : 2;//代表占2个位
	char c : 5;//代表占5个位
	char d : 4;//代表占4个位
};
int main()
{
	printf("%d\n", sizeof(A));//char 类型1个字节8个位,a占3个位,还剩5个位,可以放下b,b放完还剩3个位,放不下c,所以需要重新开辟一个字节,放c,放完c第2个字节放不下d,继续开辟一个字节,因此结构体A一共占3个字节
	return 0;
}

struct B
{
	char a : 3;
	char b : 2;
	char c : 5;
	char d : 4;
};
int main()
{
	struct B aaa = {0};
	aaa.a = 7;//a的值为7,2进制位111,a占3个位,都能看见,最高位为1,负数,取反加一,-(001)即为1
	aaa.b = 6;//b=6,6的二进制110,但是b只占2个位,所以只能看到后两位,即10,第1位为1,代表符数,取反加1,变为-(10)即-2
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值