关于枚举总结

博客介绍了枚举范围的确定规则,若枚举符值均非负,范围是[0:2^k-1],有负值则是[-2^k:2^k-1]。还说明了整型值转换为枚举值的定义规则,以及枚举的sizeof是能容纳其范围的整型的sizeof,且一般不大于sizeof(int)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【枚举范围】

如果某个枚举中所有枚举符的值均非负,枚举的表示范围是[0:2^k-1],其中的2^k是能使所有枚举符位于此范围内的最小的2的幂;如果存在负的枚举符值,该枚举的取值范围就是[-2^k:2^k-1].这样就定义了一个最小的位段,其中能保存所有枚举符值得常规2补码表示,例如:

enum e1{dark,light};//范围0:1

enum e2{a = 3,b=9};//范围0:15

enum e3{min = -10,max = 1000000}; // 范围-1048576:1048575.

 

【关于类型和范围的枚举定义规则】

一个整型值可以显式地转换到一个枚举值。除非这种转换地结果位于枚举范围之内,否则就是无定义地。例如:

enum flag{x=1,y=2,z=4,e=8};//范围0:15

flag f1 = 5;//类型错:5不是flag类型

flag f2 = flag(5);//可以:flag(5)是flag类型且在flag的范围之内。

flag f3 = flag(z|e)//可以;flag(12)是flag类型且在flag范围之内。

flag f4 = flag(99)//无定义:99不在flag的范围之内。

 

【关于枚举的sizeof】

一个枚举的sizeof就是某个能够容纳其范围的整型的sizeof,而且不会大于sizeof(int),除非有每个枚举符的值不能用int也不能用unsigned int 表示。举例,在sizeof(int) == 4的机器上,sizeof(e1)可以是1,也可以是4但绝对不会是8.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值