给定枚举类型Right,其中
2的零次方 = 权限A开放
2的1次方 = 权限B开放
2的2次方 = 权限C开放那么
具有权限AB的数值就为 2的1次方 + 2的0次方=3
具有权限AC的数值就为 2的2次方 + 2的0次方=5
具有权限BC的数值就为 2的2次方 + 2的1次方=6
具有权限ABC的数值就为 2的2次方 + 2的1次方 + 2的0次方=7现在已知数值,要求反向解析权限(简洁、易懂的算法)不知道我说清楚了没有,以前没有做过啊
各位达人,帮忙啊
2的零次方 = 权限A开放
2的1次方 = 权限B开放
2的2次方 = 权限C开放那么
具有权限AB的数值就为 2的1次方 + 2的0次方=3
具有权限AC的数值就为 2的2次方 + 2的0次方=5
具有权限BC的数值就为 2的2次方 + 2的1次方=6
具有权限ABC的数值就为 2的2次方 + 2的1次方 + 2的0次方=7现在已知数值,要求反向解析权限(简洁、易懂的算法)不知道我说清楚了没有,以前没有做过啊
各位达人,帮忙啊
[Flags]
enum Right:int
{
A = 0x01,
B = 0x02,
C = 0x04,
}
使用:
1。
Right myRight = Right.A | Right.B;
if(myRight & Right.A == Right.A)//有A权限
{
}
其他同理
2。
Right myRight = 3;
if(myRight & Right.A == Right.A)//有A权限
{
}
{
static public void Main()
{
for(int index = 0; index < 20; ++index)
{
Console.WriteLine(Matching(index));
}
} static string Matching(int code)
{
string[] str = {"A","B","C"};
string tmpStr = String.Empty;
for(int index = 0; index < str.Length; ++index)
{
if(1 == (code>>index&1))
{
tmpStr += str[index];
}
}
return tmpStr;
}
}
谢谢你的回答
但是,如果我想知道给定的数值(你的例子用的是3)具有哪些权限,而不仅仅是用if来判断是否有A的权限呢?这样以后添加权限,代码也不用进行大的修改
1 1 1
先将你的数字转换为2进制(假设3位)
如果第一位是1,则有A权限,如果第二位是1,则有B权限,如果第三位是1,则有C权限。
依次类推当然,在做之前,你要排好顺序,做好对应。
1 1 1 1 1 1如果是3,则3=000011,那么具有AB权限
如果是5,则5=000101,那么具有AC权限
如果是27,则27=011011,那么具有ABDE权限
BitArray ba = new BitArray(new int[] { val });
for(int i = 0; i < 32; i++)
{
Console.WriteLine(ba[i]);
}
写一个验证函数, bool Check(Right right,int num);
每次调用吧