天天看点

c#位运算小例子笔记

关于位运算,网上有挺多好的博客介绍过,我就不多解释了

这里只记录一个小例子,是在理解位运算时候写的,帮助自己加深一下印象,做个笔记mark一下

具体场景

摇骰子游戏

1每个骰子有6个点,1-3为小,4-6为大,[1,3,5]为单,[2,4,6]为双

2每次扔3个骰子

 问题:如果把每场结果设成实体对象,那么该如何设计呢?

其他的属性就不过多纠结,主要在3个骰子这里

不管是把骰子设成复杂对象,或者是把每个骰子的大小单双分开记下来,都会显得很麻烦

如果使用位运算,就会变得简单许多,代码如下:

1  public class GameResult
 2     {
 3         //第一个骰子
 4         public int FirstDiceValue { get; set; }
 5         public Mode FirstDiceMode { get { return SetModel(FirstDiceValue); } }
 6         //第二个骰子
 7         public int SecondDiceValue { get; set; }
 8         public Mode SecondDiceMode { get { return SetModel(SecondDiceValue); } }
 9         //第三个骰子
10         public int ThirdDiceValue { get; set; }
11         public Mode ThirdDiceMode { get { return SetModel(ThirdDiceValue); } }
12 
13         private Mode SetModel(int value)
14         {
15             Mode Size;
16             Mode EvenOdd;
17             if (value >= 3) Size = Mode.大;
18             else Size = Mode.小;
19             if (value % 2 == 0) EvenOdd = Mode.双;
20             else EvenOdd = Mode.单;
21             return Size | EvenOdd;
22         }
23     }
24 
25     /// <summary>
26     /// 骰子的大小和单双结果枚举
27     /// </summary>
28     [Flags]
29     public enum Mode
30     {
31         //1111 大小单双
32         双 = 1,//0001
33         单 = 2,//0010
34         小 = 4,//0100
35         大 = 8//1000
36     }      

打印一下查看结果:

1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5 
 6             GameResult resule = new GameResult()
 7             {
 8                 FirstDiceValue = 3,
 9                 SecondDiceValue = 6,
10                 ThirdDiceValue = 2
11             };
12             Console.WriteLine(resule.FirstDiceMode);
13             Console.WriteLine(resule.SecondDiceMode);
14             Console.WriteLine(resule.ThirdDiceMode);
15 
16             Console.ReadKey();
17         }
18     }      

更正:上面写判断的时候用了[(x>=3 )=> 大],所以3也成了大...

出自:博客园-半路独行

原文地址:https://www.cnblogs.com/banluduxing/p/9300153.html

本文出自于http://www.cnblogs.com/banluduxing 转载请注明出处。