enum 的范围与size

 

一、enum的取值范围
 C++标准规定超出枚举类型表示范围的赋值结果是undefined的。
 enum的取值范围和 int 的范围并不是直接一致的。计算enum的取值范围,可以按如下方式操作:
 1、不考虑负数:获取enum中的最大值,根据这个最大值所具有的位数,可以计算enum的表示范围。
 举个例子:enum test{ a=2, b=4 };最大值为4,二进制表示为100,3bits,因为3bits表示的范围是0~7,所以test的取值范围就是[0, 7];
 2、考虑负数情况。负数情况下,需要多一位的符号位,其本质还是一样的。
 比如:enum test{ a=-2, b=4 }; 绝对值最大值为4,需要3bits,由于4不是负数,还需要增加一位符号位,4bits,其表示范围就是1000~0111,所以test的取值范围就是[-8, 7]。
 如果是enum test{ a=-4, b= }; 则仅仅3bits就足够了,因为 100 就是 -4。

二、enum的size
 C++标准规定,enum的size只要能够容纳定义时刻的所有bits就可以了,具体取什么值,由编译器决定。比如enum test{ a=2, b=4 };仅需要3bits,那么可以取1B,也可以取4B,由编译器自己决定。VC中是固定取4B空间。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值