매거 유형과 비트 연산
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,
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
D. Walk on Matrix우선 우리는 언제 dp가 틀렸는지 생각한다.가설 행렬 중 하나의 점(x, y)이 10101이다.이때 최대 두 가지 선택이 (x-1, y) 또는 (x, y-1)에서 옮겨진다.다시 가설(x-1, y)은 10000이고 (...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.