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

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

具体场景

摇骰子游戏

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

2每次扔3个骰子

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

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

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

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

  public class GameResult
{
//第一个骰子
public int FirstDiceValue { get; set; }
public Mode FirstDiceMode { get { return SetModel(FirstDiceValue); } }
//第二个骰子
public int SecondDiceValue { get; set; }
public Mode SecondDiceMode { get { return SetModel(SecondDiceValue); } }
//第三个骰子
public int ThirdDiceValue { get; set; }
public Mode ThirdDiceMode { get { return SetModel(ThirdDiceValue); } } private Mode SetModel(int value)
{
Mode Size;
Mode EvenOdd;
if (value >= ) Size = Mode.大;
else Size = Mode.小;
if (value % == ) EvenOdd = Mode.双;
else EvenOdd = Mode.单;
return Size | EvenOdd;
}
} /// <summary>
/// 骰子的大小和单双结果枚举
/// </summary>
[Flags]
public enum Mode
{
//1111 大小单双
双 = ,//
单 = ,//
小 = ,//
大 = //
}

打印一下查看结果:

     class Program
{
static void Main(string[] args)
{ GameResult resule = new GameResult()
{
FirstDiceValue = ,
SecondDiceValue = ,
ThirdDiceValue =
};
Console.WriteLine(resule.FirstDiceMode);
Console.WriteLine(resule.SecondDiceMode);
Console.WriteLine(resule.ThirdDiceMode); Console.ReadKey();
}
}

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

出自:博客园-半路独行

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

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

c#位运算小例子笔记的更多相关文章

  1. C# 关于位运算的学习笔记

    一.理解什么是位运算 程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),简单来说位运算就是直接对在内存中的二进制数的每位进行运算操作. 二.学习前先了解一下有哪些运算,运算符都怎么 ...

  2. Java小知识点学习--------数组和位运算小知识点

    位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2;  此时两个数组变量都会同一时 ...

  3. c语言小技巧:C语言学习笔记之位运算求余

    我们都知道,求一个数被另一个数整除的余数,可以用求余运算符”%“,但是,如果不 允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注 意:该方法只对除数是2的N次方幂时才有效 ...

  4. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

    学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...

  5. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...

  6. hdu3006 状态压缩+位运算+hash(小想法题)

    题意:        给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起. 思路:       是个小想法题目,要用到二进制压缩,位运算, ...

  7. C#学习笔记-----C#枚举中的位运算权限分配

    一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算   得到的结果是 0011,也就是3  2.位预算有多少种?(我们就将几种我们权限中会 ...

  8. Matlab位运算笔记

    本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) ...

  9. php学习笔记位运算

    位运算 源码:用二进制表示一个数,这个码就是源码. 比如2====00000000 00000000 0000000 00000010 正数的反码 源码 补码都一样 负数的源码是符号位取反.第一个位  ...

随机推荐

  1. tf.Session()、tf.InteractiveSession()

    tf.Session()和tf.InteractiveSession()的区别 官方tutorial是这么说的: The only difference with a regular Session ...

  2. Princess Principal(思维题)

    Princess Principal https://www.nowcoder.com/acm/contest/201/J 题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号 ...

  3. spring监听与IBM MQ JMS整合

    spring xml 的配置: 文件名:applicationContext-biz-mq.xml <?xml version="1.0" encoding="UT ...

  4. Sql自定义表类型批量导入数据

    -- 创建自定义表类型 CREATE TYPE [dbo].[App_ProductTable] AS TABLE( [p_name] [varchar](50) NOT NULL, [p_audio ...

  5. socket编程介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  6. binlog怎样参与mysql recover的

    转自  Louis Hust's Blog MySQL两阶段提交 29 July 2015 参数介绍 两阶段提交 什么情况下会出现binlog写入了,但是实际这条数据不存在库中? 参数介绍 innod ...

  7. VK Cup 2016 D. Bear and Two Paths 模拟

    D. Bear and Two Paths time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  8. 5. Import the project download from Git

    1.Recover eclipse project Copy .project from other project(You can new a project first in eclipse. T ...

  9. centos6.5 redis 安装配置及java调用

    1.安装gcc 执行命令  yum install gcc 2. 安装ruby环境 yum install ruby yum install rubygems gem install redis 下载 ...

  10. hdu-1150(二分图+匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 思路:题目中给出两个机器A,B:给出k个任务,每个任务可以由A的x状态或者B的y状态来完成. 完 ...