C/C++编程语言中枚举类型(enum)介绍

本文主要介绍C/C++编程语言中枚举类型(enum)的相关知识,同时通过示例代码介绍枚举类型的使用方法。

1 概述

1.1 What

枚举类型(enumerations)是C/C++编程语言的一种派生数据类型,它是由用户定义的若干枚举常量组成的集合。

如果一个变量只有几种可能的值,那么可以将其定义为枚举类型。所谓“枚举”,是指将变量的值一一列举出来,变量只能在列举出来的枚举值范围内进行取值。

1.2 How

使用关键字 enum 创建枚举类型。枚举类型的一般用法如下:

enum 枚举名
{ 
    标识符[ = 整型常数],
    标识符[ = 整型常数],
    ...
    标识符[ = 整型常数]
} 枚举变量;

说明:

  • 需要注意枚举类型的定义形式:除最后一行外,每一行枚举常量以逗号“,”结尾,但是最后一行没有结尾标点符号;
  • 在使用枚举类型时,通常都会为定义的枚举类型设置一个保留位,便于后续对该枚举类型进行扩展,这个保留位通常会由最后一个枚举常量充当;
  • 在没有进行初始化(即省掉“=整型常数”)时,枚举类型中的第一个标识符的值默认为“0”。

2 示例代码

枚举类型的示例代码内容如下:

#include <iostream>

using namespace std;

enum eDemoEnum
{
    some1,
    some2,
    some3,
    some4,
    somen = (int)(((unsigned int)(-1))/2)
};

int main()
{
    int nMaxInt = (unsigned int)(-1);
    int nReserved = (int)(((unsigned int)(-1))/2);
    
    cout << "some1 is: " << some1 << endl;
    cout << "some2 is: " << some2 << endl;
    cout << "somen is: " << somen << endl;
    
    cout << "(unsigned int)(-1) is: " << (unsigned int)(-1) << endl;
    cout << "nMaxInt is: " << nMaxInt << endl;
    cout << "nReserved is: " << nReserved << endl;

    return 0;
}

编译并运行上述代码,结果如下:

通过上面的运行结果,可知:

  • 枚举类型中的枚举常量,默认情况下从“0”开始计数,后面的枚举常量的值依次递增;
  • 表达式“(unsigned int)(-1)”取值为“4294967295(2^{32}-1)”(详细解释见下方说明),但是如果将该表达式直接赋值给int类型的变量时,该表达式的值就会转换为int类型的值“-1”。而如果直接使用表达式“(unsigned int)(-1)”参会其他运算(如示例中的除法),再将整体的运算结果进行int类型转换,就不会出现类似的问题了。在平时涉及到类型转换时,需要特别注意这些细节;
  • 示例中使用了表达式“(int)(((unsigned int)(-1))/2)”的值对应的枚举常量“somen”作为枚举类型eDemoEnum的保留位。

说明:在C/C++语言中,将“-1”强制转换为“unsigned int”类型时,会得到该类型的最大值。由于“unsigned int”类型不能表示负数,因此会按照无符号整数的方式来解释对应的比特模式。对于32位系统,“int”类型通常占用32位,其中最高位在有符号整数中代表符号位(负数为“1”)。“-1”在二进制补码形式下的表示为全“1”(32个1),即“11111111 11111111 11111111 11111111”。当这个值被转换为“unsigned int”时,这些比特位不再解释为负数的补码形式,而是作为无符号整数的比特位来看待。因此,“(unsigned int)(-1)”的值是“4294967295”(即,2^32-1)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liitdar

赠人玫瑰,手有余香,君与吾共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值