首页 > 其他分享 >标志枚举的使用

标志枚举的使用

时间:2022-11-20 21:05:26浏览次数:66  
标签:标志 27 Log 16 42 枚举 使用 sa StatusAttributes


标志枚举的使用大多是在标记多重状态,比如说文件的属性:只读,可写,隐藏,系统文件等相关属性,都对应相应的标志位,如果在C#中想实现自己的标志枚举,也是可以的,下文是亲身试验的一段代码,希望对您有所帮助,也望您不吝赐教。

// 执行代码
private void Form1_Load(object sender, EventArgs e)
{
Log.i("=========================================");
StatusAttributes sa = StatusAttributes.Welcome | StatusAttributes.Login;
Log.e(sa);
Log.e(Convert.ToString((int)sa, 2));

if ((sa & StatusAttributes.Login) == StatusAttributes.Login)
Log.w("im login");
// &按位与
if ((sa & StatusAttributes.Meeting) != StatusAttributes.Meeting)
Log.w("im not in meeting");
// ^异或运算 不同则为1 相同则为0
sa = sa ^ StatusAttributes.Meeting;
Log.e(sa);
Log.e(Convert.ToString((int)sa, 2));
// ~取反
Log.e(~sa);
Log.e(Convert.ToString((int)~sa, 2));

Log.i("=========================================");
FileAttributes fa = (FileAttributes)10;
Log.e(fa);
if ((fa & FileAttributes.Administrator) == FileAttributes.Administrator)
Log.w("created by administrator");
if ((fa & FileAttributes.Hide) != FileAttributes.Hide)
Log.w("file is show");

FileAttributes fa2 = fa ^ FileAttributes.Hide;
Log.e(fa2);
if ((fa2 & FileAttributes.Readonly) != FileAttributes.Readonly)
Log.w("file2 can read and write");
}

注意:a << b 的意思为:二进制的a向左移动b位

// 枚举类型
[Flags]
public enum StatusAttributes
{
None = 0,
Welcome = 1 << 0,
Login = 1 << 1,
Meeting = 1 << 2,
Share = 1 << 4,
Join = 1 << 8,
}
[Flags]
public enum FileAttributes
{
None = 0,
System = 1,
Readonly = 2,
Hide = 4,
Administrator = 8,
}

输出结果

12-27 16:42:32.019   i   =========================================
12-27 16:42:32.023 e Welcome, Login
12-27 16:42:32.024 e 11
12-27 16:42:32.024 w im login
12-27 16:42:32.024 w im not in meeting
12-27 16:42:32.024 e Welcome, Login, Meeting
12-27 16:42:32.024 e 111
12-27 16:42:32.025 e -8
12-27 16:42:32.025 e 11111111111111111111111111111000
12-27 16:42:32.025 i =========================================
12-27 16:42:32.025 e Readonly, Administrator
12-27 16:42:32.025 w created by administrator
12-27 16:42:32.025 w file is show
12-27 16:42:32.025 e Readonly, Hide, Administrator

最后列出如何位运算修改标志枚举:

StatusAttributes sa = StatusAttributes.Login | StatusAttributes.Welcome;
sa = sa | StatusAttributes.Join;//添加属性
sa = sa | StatusAttributes.Share;//添加属性
sa = (sa | StatusAttributes.Share) ^ StatusAttributes.Share;//删除属性
sa = (sa | StatusAttributes.Meeting) ^ StatusAttributes.Meeting;//删除属性


标签:标志,27,Log,16,42,枚举,使用,sa,StatusAttributes
From: https://blog.51cto.com/yuzhyn/5872025

相关文章

  • C#单例模式的简单使用
    单例模式示例:publicsealedclassWindowService{//定义一个私有的静态全局变量来保存该类的唯一实例privatestaticWindowServiceService;//定义一个只读静......
  • RV-LINK:Eclipse 使用 RV-LINK 调试 RISC-V 程序
    RV-LINK项目主页:​​https://gitee.com/zoomdy/RV-LINK​​​最新的文档请访问:​​https://gitee.com/zoomdy/RV-LINK/wikis​​,这里的内容可能没有及时更新。前期准备按......
  • 为仿真器添加eCos多线程调试支持,GDBServer Extender 0.0.1 使用说明
    可以使用RedBoot或者仿真器调试eCos系统,RedBoot集成的GDBStubs已经支持eCos的多线程调试,使用GDB命令infothreads就可以读取当前的线程状态。但是使用仿真器时,由于仿真器不......
  • 获取eCos堆栈使用情况
    在嵌入式系统中,堆栈是静态分配的,不会依据堆栈的使用情况自动增加堆栈深度,存在堆栈溢出的风险。一旦发生堆栈溢出,后果很严重,可能会立即导致死机,也可能埋了一颗定时炸弹,在随后......
  • SDL安装和使用
    yuminstallSDL安装的是SDL2include的文件也是SDL2yuminstallxclock#include</usr/include/SDL2/SDL.h>#include<stdio.h>constintSCREEN_WIDTH=640;co......
  • ORA-00997: 非法使用 LONG 数据类型
    今天在创建表的时候直接用的createtableXXXasselect*fromAAA;结果出了一个:ORA-00997:非法使用LONG数据类型 的错误。后来查了一下,做下笔记:1、select查询语句中用......
  • 在新建FileInputStream时使用当前相对路径或者绝对路径作为参数的问题
    当new一个FileInputStream时,想使用相对路径这样无论我的服务端部署到哪里,都可以一直用一个文件夹而不必修改程序的路径代码,当然首先我用的绝对路径来做实验,......
  • vs2022 使用 cmake
    vs版本:vs2022vs中默认不使用cmake,在项目->cmake工作区设置中修改{"enableCMake":flase}默认为false,修改为true即可。点击CMakeLists.txt文件设置启动项,......
  • 在嵌入式软件中使用断言的一点想法
    嵌入式软件中的断言应该分成三个级别,而不是仅有启用和关闭两种。1、启用断言并打印可读信息;2、启用断言并打印代码地址、3、关闭断言。mingdu.zhengatgmaildotcom矛盾断......
  • 使用GDB检测内存泄漏
    使用GDB在malloc和free函数设置断点,并打印分配和释放时的内存地址以及调用栈,然后通过脚本分析分配和释放是否配对来检测是否存在内存泄露以及发生内存泄漏的位置。mingdu.zh......