bit mask example

remotes/origin/master
syneffort 3 years ago
parent 85423c2648
commit fa53570753
  1. 8
      BitMaskTest/BitMaskTest.csproj
  2. 25
      BitMaskTest/BitMaskTest.sln
  3. 10
      BitMaskTest/FlagsHelper.cs
  4. 45
      BitMaskTest/PopupButtonMask.cs
  5. 39
      BitMaskTest/Program.cs

@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>

@ -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

@ -0,0 +1,10 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace BitMaskTest
{
class FlagsHelper
{
}
}

@ -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<ButtonMask> GetButtons()
{
List<ButtonMask> buttons = new List<ButtonMask>();
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;
}
}
}

@ -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<ButtonMask> buttons = popupButton.GetButtons();
foreach (ButtonMask item in buttons)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
}
Loading…
Cancel
Save