枚举的位运算

C# 枚举与位运算示例
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlagDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //string _file = @"C:\unintall.log";
            //FileAttributes attributes = File.GetAttributes(_file);

            //Console.WriteLine("Is {0} hidden? {1}", _file, (attributes & FileAttributes.Hidden) == FileAttributes.Hidden);

            //File.SetAttributes(@"D:\AssetWin32Xml.xml",  FileAttributes.Normal);

            Actions actions = Actions.Read | Actions.Write;
            Console.WriteLine(actions.ToString());

            Actions a = (Actions)Enum.Parse(typeof(Actions), "Query", true);
            Console.WriteLine(a.ToString());

            a = (Actions)Enum.Parse(typeof(Actions), "Query, Read", false);
            Console.WriteLine(a.ToString(""));


            a = (Actions)Enum.Parse(typeof(Actions), "14", false);
            Console.WriteLine(a.ToString(""));
        }
    }

    [Flags]
    internal enum Actions
    {
        Read = 1<<0,  //1
        Write = 1<<1,  //2
        Delete = 1<<2,  //4
        Query  = 1<<3, //8
        Sync = 1<<4,  //16
    }


}





### TypeScript 枚举位运算结合使用 在TypeScript中,枚举可以用来定义一组命名常量。当这些枚举成员表示的是二进制数中的不同位置上的1时,就可以利用按位操作符来进行组合或检测多个条件的状态[^1]。 #### 定义带有位标志的枚举 下面是一个简单的例子,在这个例子中定义了一个名为`PermissionFlags`的枚举,它代表用户权限的不同方面: ```typescript enum PermissionFlags { None = 0, Read = 1 << 0, // Binary: 0001 Write = 1 << 1, // Binary: 0010 Execute = 1 << 2, // Binary: 0100 FullControl = Read | Write | Execute // Binary: 0111 (7 in decimal) } ``` 这里使用了左移操作符(`<<`)来设置每一位上是否有值,这样做的好处是可以确保每个权限对应于不同的比特位,从而允许后续通过按位逻辑运算轻松地组合和测试各种权限状态。 #### 组合权限 要给某个变量赋予多种权限,可以通过按位或(|)运算符实现: ```typescript let userPermissions: number; userPermissions = PermissionFlags.Read | PermissionFlags.Write; // 结果为3 (Binary: 0011) console.log(userPermissions); ``` 这段代码将读取和写入两个权限结合起来赋给了`userPermissions`变量。 #### 测试特定权限是否存在 如果想要检查某项具体权限是否已经被授予,则可借助按位与(&)运算符完成此目的: ```typescript function hasPermission(permissions: number, flag: PermissionFlags): boolean { return (permissions & flag) === flag; } // 检查用户是否有执行权限 if(hasPermission(userPermissions, PermissionFlags.Execute)){ console.log('User can execute'); }else{ console.log('User cannot execute'); } ``` 上述函数接受当前用户的总权限集合以及待测的具体权限作为参数,并返回一个布尔值指示该权限是否被包含其中。 这种模式非常适合处理那些需要同时管理多选一或多选多的情况下的场景,比如访问控制列表ACLs、配置选项等应用场合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值