zoukankan      html  css  js  c++  java
  • C# 枚举运用"位"操作和"或"操作

    定义:

        /// <summary>
        /// The js function type(the same as name).
        /// </summary>
        [Flags]
        public enum CallJSFunctionTypes
        {
            None = 0,
            ResetFixedBar = 1 << 1,
            ResetRequiredField = 1 << 2,
            SetValidateSuccessTextBoxStyle = 1 << 3,
            SetValidateFailTextBoxStyle = 1 << 4,
            ResizeSummary = 1 << 5
            //,All = 1 << 6 - 1
        }

    使用:

    //可以先给个初始值.
    CallJSFunctionTypes JSFunctions = CallJSFunctionTypes.None;
    
    //...
    
    //可以这样赋值, 想包含什么意义, 就用"与"叠加. 
    JSFunctions = CallJSFunctionTypes.ResetFixedBar | CallJSFunctionTypes.ResetRequiredField | CallJSFunctionTypes.ResizeSummary;
    
    //...
    
    //判断是否包含某个意义
    if ((JSFunctions & CallJSFunctionTypes.ResetFixedBar) == CallJSFunctionTypes.ResetFixedBar)
    {
          //Do something.
    }

    原理:

    Int32 是 4字节32位二进制
    None = 0,                                               

    即 0000 0000 0000 0000 0000 0000 0000 0000


    ResetFixedBar = 1 << 1,                           

    即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0000 0010


    ResetRequiredField = 1 << 2,                   

    即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0000 0100


    SetValidateSuccessTextBoxStyle = 1 << 3,

    即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0000 1000


    SetValidateFailTextBoxStyle = 1 << 4,       

    即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0001 0000


    ResizeSummary = 1 << 5,                        

    即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0010 0000


    All = 1 << 6 - 1                                        

    即 0000 0000 0000 0000 0000 0000 0010 0000 -> 0000 0000 0000 0000 0000 0000 0011 1111

    赋值的时候:

    ResetFixedBar|SetValidateSuccessTextBoxStyle|ResizeSummary

    0000 0000 0000 0000 0000 0000 0000 0010

    0000 0000 0000 0000 0000 0000 0000 1000

    0000 0000 0000 0000 0000 0000 0010 0000

    ____________________________________

    0000 0000 0000 0000 0000 0000 0010 1010

    判断的时候:

    判断有没有ResetFixedBar, 相"与"(&)

    0000 0000 0000 0000 0000 0000 0010 1010

    0000 0000 0000 0000 0000 0000 0000 0010

    ____________________________________

    0000 0000 0000 0000 0000 0000 0000 0010 即ResetFixedBar, 即存在ResetFixedBar

    判断有没有ResetRequiredField, 相"与"(&)

    0000 0000 0000 0000 0000 0000 0010 1010

    0000 0000 0000 0000 0000 0000 0000 0100

    ____________________________________

    0000 0000 0000 0000 0000 0000 0000 0000 即不存在ResetFixedBar

  • 相关阅读:
    linux环境下时区无法设置(UTC无法更改为CST)的问题解决
    SUSE12 网卡配置、SSH远程配置、解决CRT密钥交换失败,没有兼容的加密程序
    SUSE12 操作系统安装
    Unity技术支持团队性能优化经验分享
    基于unity3d游戏的android版本逆向初探
    Unity手游引擎安全解析及实践
    盛大游戏技术总监徐峥:Unity引擎使用的三种方式
    基于Unity 5的次世代卡通渲染技术 -- Unite 2017 米哈游总监贺甲分享实录
    欢乐互娱庞池海:《龙之谷》项目性能优化经验分享
    ue4 htcvivi简单配置
  • 原文地址:https://www.cnblogs.com/xachary/p/3897708.html
Copyright © 2011-2022 走看看