매거 유형과 비트 연산

9915 단어 비트 연산
카탈로그
  • 열거
  • 비트 연산
  • 일일이
    열거 유형은 이름과 값의 조합이다.
    열거 형식은 값 형식입니다.
    1. 왜 매거 유형은 명칭과 조합할 만한 가치가 있는가?때때로 나는 키 이름만 보고 상대적인 값을 보지 못했다.
    public enum Options
    
    {
    
                Insert,
    
                Update,
    
                Save,
    
                Delete,
    
                Query
    
    }

    컴파일러가 위에 완전하게 채워줄 거예요.
    public enum Options
    
    {
    
                Insert=0,
    
                Update=1,
    
                Save=2,
    
                Delete=3,
    
                Query=4
    
    }

    기본값은 0부터 시작하여 순차적으로 지정됩니다.
    2. 열거 유형이 값 유형인 이유
    시스템 때문에.Enum은 System에서 파생됩니다.ValueType, System.ValueType은 System에서 직접 파생됩니다.Object
    컴파일러가 열거 유형을 만났을 때, 자신만의 이해가 있을 것이다.
    internal struct Options:System.Enum
    
     {
    
                public const Options Insert = (Options)0;
    
                public const Options Update = (Options)1;
    
                public const Options Save = (Options)2;
    
                public const Options Delete = (Options)3;
    
                public const Options Query = (Options)4;
    
                public int value__;
    
    }

    Enum 유형은 계승할 수 없지만 컴파일러가 매거 유형에 대해 자신의 이해를 형성하고 그 원리를 이해할 수 있음을 알 수 있다.
    3. 작업 열거 유형
    (1)GetUnderLyingType: 열거 형식의 값을 수용하는 기초 형식을 되돌려줍니다
    모든 매거 형식은 기본 형식이 있습니다. 기본값은 int입니다. 따라서 위의 컴파일러는 기본적으로 int 형식의 값을 0~4로 채웁니다.
    물론 이 기본 유형은byte\sbyte\short\usshot\int\uintr\long\ulong으로 직접 지정할 수 있습니다.
    public enum Options:byte
    
    {
    
                Insert,
    
                Update,
    
                Save,
    
                Delete,
    
                Query
    
    }
    var type= Enum.GetUnderlyingType(typeof(Options));
    
    
    
     string strs = type.ToString();

    매거 유형은 기원 유형으로 우리는 그 실례에 대해 많은 평상시 조작부호를 조작할 수 있으며 매거 실례는value 에 대응한다필드.
     
    (2) GetValues: 각 요소에 칼슘 요소의 이름과 해당 값이 포함된 배열을 가져옵니다.
    System.Collections.Generic.Dictionary<int,string> opsDic=new     System.Collections.Generic.Dictionary<int,string>();
    
    Options[] ops = (Options[])Enum.GetValues(typeof(Options));
    
    foreach (var o in ops)
    
    {
    
                    try
    
                    {
    
                        opsDic.Add((int)o, o.ToString());
    
                    }
    
                    catch (Exception ex)
    
                    {
    
                        Console.WriteLine("  {0}   ", (int)o);
    
                    }
    
    }    

    (3) GetNames: 문자열 이름 배열 세트를 반환합니다.
    string[] opsNames = Enum.GetNames(typeof(Options)); 

    (4) Parse 및 TryParse: 숫자와 이름의 문자열을 해당 열거 유형으로 변환할 수 있습니다.
    Options turnOption = (Options)Enum.Parse(typeof(Options), "Insert");
    
    Options turnOption1 = (Options)Enum.Parse(typeof(Options), "1");
    Options tryTurnOption;
    
    Enum.TryParse<Options>("insert", false, out tryTurnOption);

    위 표지
    우리는 우리의 수요를 충족시키기 위해 여러 개의 매거진 조합이 필요할 수도 있다.
    비트 연산은 2진 비트에 대한 연산으로 자주 사용하는 비트 연산은 주로 (&), 또는 (|)와 비(~)
    e.m:1 & 0 = 0, 1 | 0 = 1, ~1 = 0
    매거 유형을 비트 연산 능력을 가지려면 [Flags Attribute]의 간략한 [Flags]를 추가해야 한다.어떤 분은 on 상태이고, 어떤 분은 오프 상태입니다.그래서 보통 None=0의 매거 기호를 정의합니다.상응하는 값은 모두 2의 지수 배이다.후속 연산을 위한 것이다.
    [Flags]
    
    public enum Options
    
    {
    
                None=0,
    
                Insert = 1, //   : 0001
    
                Update = 2, //   : 0010
    
                Save = 4,   //   : 0100
    
                Delete = 8, //   : 1000
    
                Query = 16  //   :10000
    
    }

    사용 권한 목록:
    Options hasOps = Options.Insert | Options.Update;
    
    string ops = hasOps.ToString();

    Options는Insert | Options.Update=0001|0010, "|"및 작업: 1 | 0 = 1은 바이너리 연산입니다.우리는 0011의 결과를 얻을 수 있다.이 결과에 대해 어떻게 응용할 것인가.
    권한 판단:
    if ((hasOps & Options.Insert) == Options.Insert)
    
    {
    
                    Console.WriteLine("Has {0}", Options.Insert);
    
    }

    우리는'&'와 조작에 따라 권한을 판단할 수 있다. 0011&0001=0001, 뒤의 0001==0001로 조건에 부합되고 Insert 권한이 있다.
    실례: 항목에서 때때로 정규 일치가 진행됩니다.
    string[] imgsArr = Regex.Split(imgsArea, ",", RegexOptions.IgnoreCase | RegexOptions.Multiline);이 말은 주로 뒤에 보입니다:RegexOptions.IgnoreCase | RegexOptions.Multiline은 0001|0010=0011로 표현할 수 있으며 두 가지 조건에 동시에 부합해야 한다는 뜻이다.
    :RegexOptions.IgnoreCase는 대소문자 일치 및 RegexOptions를 구분하지 않습니다.멀티 라인 모드 일치
    [Flags]
    public
    enum RegexOptions { None = 0, IgnoreCase = 1, Multiline = 2, ExplicitCapture = 4, Compiled = 8, Singleline = 16, IgnorePatternWhitespace = 32, RightToLeft = 64, ECMAScript = 256, CultureInvariant = 512, }

    좋은 웹페이지 즐겨찾기