给定枚举类型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现在已知数值,要求反向解析权限(简洁、易懂的算法)不知道我说清楚了没有,以前没有做过啊
各位达人,帮忙啊

解决方案 »

  1.   

    定义:
    [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权限
    {
    }
      

  2.   

    using System;public class Match
    {
    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.   

    TO w_k_(BarDy) :
    谢谢你的回答
    但是,如果我想知道给定的数值(你的例子用的是3)具有哪些权限,而不仅仅是用if来判断是否有A的权限呢?这样以后添加权限,代码也不用进行大的修改
      

  4.   

    A B C
    1 1 1
    先将你的数字转换为2进制(假设3位)
    如果第一位是1,则有A权限,如果第二位是1,则有B权限,如果第三位是1,则有C权限。
    依次类推当然,在做之前,你要排好顺序,做好对应。
      

  5.   

    F E D C B A
    1 1 1 1 1 1如果是3,则3=000011,那么具有AB权限
    如果是5,则5=000101,那么具有AC权限
    如果是27,则27=011011,那么具有ABDE权限
      

  6.   

    int val = 0xF0F0F0F;
    BitArray ba = new BitArray(new int[] { val });
    for(int i = 0; i < 32; i++)
    {
        Console.WriteLine(ba[i]);
    }
      

  7.   

    楼上的都说了
    写一个验证函数, bool Check(Right right,int num);
    每次调用吧