int数与多枚举值互转

在C/C++在C/C++的开发中经常会遇到各种数据类型互转的情况,正常的互转有:单个枚举转int数,int数转float数,float数转double数等。但是我们有时也会遇到多个枚举值与数字互转的情形(例如多个算法类型枚举开启标志转成数字,这个数字来表示多个标志位,按位来表示)。这样一个数字就能表示很多个标志位了,针对内存较少的嵌入式设备,这么操作可以达到节约内存消耗,提高程序运行效率的目的。

Demo示例

demo核心知识点:通过位运算符(布尔位运算符:"~"、"&"、"|";移位运算符:"<<")实现int数与多枚举值互转。
Code:

#include <iostream>using namespace std;int nFlag = 0; //用移位表示各个枚举的开关
typedef enum
{TYPEA, //A开启,则nflag为1=0x00000001TYPEB, //B开启,则nflag为2=0x00000010TYPEC, //C开启,则nflag为4=0x00000100TYPED, //D开启,则nflag为8=0x00001000TYPENUM //枚举最大值,计数用
}EMTypeNum;void int2enum (int n)
{if(n&(0x01<<TYPEA)){//为真cout << "TYPEA is ON\n";}else{//为假cout << "TYPEA is OFF\n";}if(n&(0x01<<TYPEB)){//为真cout << "TYPEB is ON\n";}else{//为假cout << "TYPEB is OFF\n";}if(n&(0x01<<TYPEC)){//为真cout << "TYPEC is ON\n";}else{//为假cout << "TYPEC is OFF\n";}if(n&(0x01<<TYPED)){//为真cout << "TYPED is ON\n";}else{//为假cout << "TYPED is OFF\n";}
} void enum2int(EMTypeNum eMType, bool bOn)
{if(bOn){nFlag |= (0x01 << eMType);}else{nFlag &= ~(0x01 << eMType);}cout << "nFlag:" << nFlag << endl;
}int main() {int i = 0;for(i = 0; i < TYPENUM;i++){enum2int((EMTypeNum)i, true);int2enum(nFlag);cout << endl;}for(i = 0; i < TYPENUM;i++){enum2int((EMTypeNum)i, false);int2enum(nFlag); cout << endl;}return 0;
}

Result:

nFlag:1
TYPEA is ON
TYPEB is OFF
TYPEC is OFF
TYPED is OFFnFlag:3
TYPEA is ON
TYPEB is ON
TYPEC is OFF
TYPED is OFFnFlag:7
TYPEA is ON
TYPEB is ON
TYPEC is ON
TYPED is OFFnFlag:15
TYPEA is ON
TYPEB is ON
TYPEC is ON
TYPED is ONnFlag:14
TYPEA is OFF
TYPEB is ON
TYPEC is ON
TYPED is ONnFlag:12
TYPEA is OFF
TYPEB is OFF
TYPEC is ON
TYPED is ONnFlag:8
TYPEA is OFF
TYPEB is OFF
TYPEC is OFF
TYPED is ONnFlag:0
TYPEA is OFF
TYPEB is OFF
TYPEC is OFF
TYPED is OFF

结束寄语

有关int数与多枚举值互转的介绍就到此结束啦!下篇博文与各位再见面~

写博不易,如蒙厚爱,赏个关注,一键三连~~点赞+评论+收藏												

【⭐C/C++の深入浅出⭐】int数与多枚举值互转相关推荐

  1. 获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是第几个值 * * 2.2 传递数组arr调用getNum(int[] arr)方法,获取返回值,并打印输出

    package Day05;import java.util.Scanner;/*** 2.定义main方法:* * 2.1 获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是 ...

  2. 输入今天是星期几的序号,给今天和昨天赋予枚举值,并输出昨天是星期几的枚举值

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p165 习题6 4.输入今天是星期几的序号(0~6代表星期天至星期六),给今天和昨天赋予枚举值,并输出 ...

  3. 如何从Java中的字符串值获取枚举值?

    说我有一个枚举 public enum Blah {A, B, C, D } 我想找到一个字符串的枚举值,例如"A"就是Blah.A 怎么可能做到这一点? Enum.valueOf ...

  4. OpenCV中函数imread的参数flags的枚举值(可设置值)及其具体意义

    imread函数的原型如下: C++: Mat cv::imread(const String & filename,int flags = IMREAD_COLOR) Python: ret ...

  5. 将枚举值转换为DropDownList等的选项值

    应用场景:在项目中,我们已习惯将较稳定的分类标准定义为枚举,来保证程序中取值的合法性,也使代码更清晰.某些情况下我们需要在DropDownList等选择控件上绑定某个枚举的所有枚举值,供用户自行选择, ...

  6. mysql characterencoding 枚举值_mysql中enum类型理解,读完之后,大部分程序员收藏了......

    ENUM是枚举类型,它虽然只能保存一个值,却能够处理多达65535个预定义的值.下面是我写的一个mysql语句 CREATE TABLE student(id INT(11) PRIMARY key ...

  7. Java黑皮书课后题第2章:2.11(人口统计)重写编程练习题1.11,提示用户输入年数,然后显示这个年数之后的人口值,将1.11中的提示用于这个程序

    2.11(人口统计)重写编程练习题1.11,提示用户输入年数,然后显示这个年数之后的人口值,将1.11中的提示用于这个程序 题目 题目描述 运行示例 涉及的1.11代码(非本题代码) 破题 代码块 题 ...

  8. 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。

    给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序. import java.util.Arrays;public class MaximumDif ...

  9. 枚举值转换(字符串转换为枚举和整数转换为枚举)

    假设定义了一个这样的枚举类型: enum MyEnum { aa = 1, bb = 2 } 1.字符串转换为枚举: string strA = "aa"; MyEnum myEn ...

最新文章

  1. springmvc教程(2)
  2. 电脑屏保海底世界_炸弹测深出来的海底一万米,都藏有何种玄机?
  3. 二十五还是单身的十大原因
  4. 实用防火墙(Iptables)脚本分析
  5. 泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ④ 初认识阿里天猫精灵官方Genie BT mesh Stack框架, windows平台搭建打印Hello World !
  6. 2012中国云实践之企业总评榜
  7. 关于NB-IoT,这四十个问题经典回答
  8. 1、Swing简介:Swing是什么?
  9. java程序一图片为背景_利用Java处理图片,更换背景
  10. 贴片天线的HFSS和CST仿真对比
  11. 第12章实验1:学生成绩管理系统V5.0
  12. linux PS命令详解
  13. 首发速学——腾讯云数据库TDSQL(PostgreSQL版)训练营正式开营
  14. JavaScript 制作简易ATM机
  15. Kid的某些跳刺套路
  16. 上海计算机科学大学排名,计算机科学与技术专业大学排名
  17. Java SPI实现插件化
  18. cognos java_Cognos第三方用户认证(CustomJavaProvider)
  19. PlayOnLinux 安装 金山打字通2016
  20. 万邦阿里巴巴中国站获得1688商品详情 API 返回值说明

热门文章

  1. LA 2659 poj 3076 zoj 3122 Sudoku(精确覆盖 + DLX)
  2. Thinkphp5.1依赖注入、容器、闭包的注入
  3. PHP漏洞之session会话劫持
  4. 链接和作用域2 - C++快速入门43
  5. 关于 WPF Loading初始界面的实现方式
  6. CUDA程序性能调优
  7. win10远程控制centos7.0开机
  8. 《Linux与unix Shell编程指南》 总结
  9. chrome 获取剪贴板内容_Chrome 开发者工具的11 个高级使用技巧
  10. 云炬创业政策学习笔记20210115