c#位运算小例子笔记
关于位运算,网上有挺多好的博客介绍过,我就不多解释了
这里只记录一个小例子,是在理解位运算时候写的,帮助自己加深一下印象,做个笔记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#位运算小例子笔记的更多相关文章
- C# 关于位运算的学习笔记
一.理解什么是位运算 程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),简单来说位运算就是直接对在内存中的二进制数的每位进行运算操作. 二.学习前先了解一下有哪些运算,运算符都怎么 ...
- Java小知识点学习--------数组和位运算小知识点
位运算符: >>>无符号右移运算符,无符号右移的规则和右移的规则同样,仅仅是在填充时,无论原来是正数还是负数都用0来补充. 数组: arr1=arr2; 此时两个数组变量都会同一时 ...
- c语言小技巧:C语言学习笔记之位运算求余
我们都知道,求一个数被另一个数整除的余数,可以用求余运算符”%“,但是,如果不 允许使用求余运算符,又该怎么办呢?下面介绍一种方法,是通过位运算来求余,但是注 意:该方法只对除数是2的N次方幂时才有效 ...
- Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期
学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...
- Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码
通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...
- hdu3006 状态压缩+位运算+hash(小想法题)
题意: 给了n个集合,问你这n个集合可以组合出多少种集合,可以自己,也可以两个,也可以三个....也可以n个集合组在一起. 思路: 是个小想法题目,要用到二进制压缩,位运算, ...
- C#学习笔记-----C#枚举中的位运算权限分配
一.基础知识 什么是位运算? 用二进制来计算,1&2:这就是位运算,其实它是将0001与0010做位预算 得到的结果是 0011,也就是3 2.位预算有多少种?(我们就将几种我们权限中会 ...
- Matlab位运算笔记
本文为转载其他地方的文章; MATLAB函数 1.matlab函数bitset 设置数的某一位二进制位为1. <Simulink与信号处理> 使用方法 C = bitset(A,bit) ...
- php学习笔记位运算
位运算 源码:用二进制表示一个数,这个码就是源码. 比如2====00000000 00000000 0000000 00000010 正数的反码 源码 补码都一样 负数的源码是符号位取反.第一个位 ...
随机推荐
- Codeforces Beta Round #14 (Div. 2)
Codeforces Beta Round #14 (Div. 2) http://codeforces.com/contest/14 A 找最大最小的行列值即可 #include<bits/s ...
- SSH框架整合的其它方式
--------------------siwuxie095 SSH 框架整合的其它方式 1.主要是整合 Spring 框架和 Hibernate 框架时,可以不写 Hibernate 核心配置文件: ...
- C++,坑...
如果使用const全局变量,记得声明处的引用处都加extern. uint32_t等,t代表是typedef的,在stdint.h头文件里,C99后引入,记得先测试再用. accept函数的参数,记得 ...
- php.ini memory_limit引起的问题
故障现象 在运行PHP程序,通常会遇到“Fatal Error: Allowed memory size of xxxxxx bytes exhausted”的错误, 这个意味着PHP脚本使用了 ...
- discuz回贴通知插件实现-页面嵌入点(钩子)
1.如何保证主题被回复时业务代码被执行. 2.获得主题,主题发布者,贴子等信息. 3.discuz发送email邮件. discuz使用嵌入点(钩子)来处理代码的执行时机. 当用户开启插件开发者模 ...
- linux用户和组
1.用户隶属于用户组的. 2.用户与用户组配置文件 1)用户组配置文件 /etc/group 第一列:用户组的组名 第二列:组密码(真正的密码存储在了gshadow中) 第三列:用户组组ID,用户组唯 ...
- .zip/.rar打包与解压
Linux下如何解压.zip和.rar文件,对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于zip linux下提供了zip和unzip程序,zip是 ...
- RPM包制作方法
一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...
- rpmdb open failed的解决办法
错误信息如下: “错误:无法从 /var/lib/rpm 打开软件包数据库 CRITICAL:yum.main: Error: rpmdb open failed” ...
- 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 ...