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 转载请注明出处。