zoukankan      html  css  js  c++  java
  • 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 转载请注明出处。

  • 相关阅读:
    Java练习 SDUT-3328_JAVA判断合法标识符
    问题2:css图片、文字居中
    问题1:jquery实现全选功能,第二次失效(已解决)
    问题2:input、textarea、submit 宽度设置为100%,但显示宽度不一致
    问题1:设置了text-overflow : ellipsis未起作用
    问题1:canvas绘制图片加载不出来
    问题1:鼠标指向导航栏li,但li中a样式未改变
    Shell工具| 流程控制
    Hadoop |集群的搭建
    MySQL高级01
  • 原文地址:https://www.cnblogs.com/banluduxing/p/9300153.html
Copyright © 2011-2022 走看看