From fa535707534e88aebcea9f59b5cd2f2ac7fbba9f Mon Sep 17 00:00:00 2001 From: syneffort Date: Mon, 8 Aug 2022 16:56:33 +0900 Subject: [PATCH] bit mask example --- BitMaskTest/BitMaskTest.csproj | 8 ++++++ BitMaskTest/BitMaskTest.sln | 25 +++++++++++++++++++ BitMaskTest/FlagsHelper.cs | 10 ++++++++ BitMaskTest/PopupButtonMask.cs | 45 ++++++++++++++++++++++++++++++++++ BitMaskTest/Program.cs | 39 +++++++++++++++++++++++++++++ 5 files changed, 127 insertions(+) create mode 100644 BitMaskTest/BitMaskTest.csproj create mode 100644 BitMaskTest/BitMaskTest.sln create mode 100644 BitMaskTest/FlagsHelper.cs create mode 100644 BitMaskTest/PopupButtonMask.cs create mode 100644 BitMaskTest/Program.cs diff --git a/BitMaskTest/BitMaskTest.csproj b/BitMaskTest/BitMaskTest.csproj new file mode 100644 index 0000000..c73e0d1 --- /dev/null +++ b/BitMaskTest/BitMaskTest.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp3.1 + + + diff --git a/BitMaskTest/BitMaskTest.sln b/BitMaskTest/BitMaskTest.sln new file mode 100644 index 0000000..a79c56b --- /dev/null +++ b/BitMaskTest/BitMaskTest.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32630.194 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BitMaskTest", "BitMaskTest.csproj", "{AACE96BB-69D6-4E58-BB24-27B57CE5AC2B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AACE96BB-69D6-4E58-BB24-27B57CE5AC2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AACE96BB-69D6-4E58-BB24-27B57CE5AC2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AACE96BB-69D6-4E58-BB24-27B57CE5AC2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AACE96BB-69D6-4E58-BB24-27B57CE5AC2B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D595499E-EBA3-423F-AF31-7175387FA570} + EndGlobalSection +EndGlobal diff --git a/BitMaskTest/FlagsHelper.cs b/BitMaskTest/FlagsHelper.cs new file mode 100644 index 0000000..6bda65a --- /dev/null +++ b/BitMaskTest/FlagsHelper.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BitMaskTest +{ + class FlagsHelper + { + } +} diff --git a/BitMaskTest/PopupButtonMask.cs b/BitMaskTest/PopupButtonMask.cs new file mode 100644 index 0000000..37db872 --- /dev/null +++ b/BitMaskTest/PopupButtonMask.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BitMaskTest +{ + [Flags] + public enum ButtonMask + { + None = 0x00, + Remove = 0x01, + LevelUp = 0x02, + Change = 0x04, + Reset = 0x08, + Cancel = 0x10, + } + + class PopupButtonMask + { + public ButtonMask Mask { get; set; } = ButtonMask.None; + + public List GetButtons() + { + List buttons = new List(); + foreach (ButtonMask flag in Enum.GetValues(typeof(ButtonMask))) + { + if (checkMask(flag)) + buttons.Add(flag); + } + + if (buttons == null || buttons.Count < 1) + return null; + + return buttons; + } + + private bool checkMask(ButtonMask compareTarget) + { + int flags = (int)this.Mask; + int flag = (int)compareTarget; + + return (flags & flag) != 0; + } + } +} diff --git a/BitMaskTest/Program.cs b/BitMaskTest/Program.cs new file mode 100644 index 0000000..fa13804 --- /dev/null +++ b/BitMaskTest/Program.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +namespace BitMaskTest +{ + /* + * AND &: 비트가 모두 1일 때 1 반환 + * 1011 & 1001 = 1001 + * + * OR |: 비트가 하나라도 1일 때 1 반환 + * 1011 | 1001 = 1011 + * + * XOR ^: 비트가 같지 않을 때 1 반환 + * 1011 ^ 1001 = 0010 + * + * NOT ~: 비트 반전 + * ~1011 = 0100 + * + * Shift << >>: 비트를 옮기는 연산 + * 001011 << 2 = 101100 + * 001011 >> 2 = 000010 + */ + class Program + { + static void Main(string[] args) + { + PopupButtonMask popupButton = new PopupButtonMask(); + popupButton.Mask = ButtonMask.LevelUp | ButtonMask.Reset | ButtonMask.Cancel | ButtonMask.Remove | ButtonMask.Change; + + List buttons = popupButton.GetButtons(); + foreach (ButtonMask item in buttons) + { + Console.WriteLine(item); + } + + Console.ReadKey(); + } + } +}