记录一个常用的一个整型,存储多个值,利用16进制,或、与运算

场景是这样的,对象属性仅只有一个int的扩展字段,新建字段改动太大,所有需要糅合再一个字段里面标示多个属性...

0001 0000

0010 0000

16进制长这样...所以可以利用位来标记不同的属性,还有他们常说的高4位和低4位,例如上面,高4位就是0001,低4位就是0000

假如:高4位的第一位(顺序是从右到左)是1的话,代表北京,依次第二位是1的话代表重庆,依次第三位是1的话代表烤鸭,依次第四位代表火锅

转换成值对应就是:

北京:16,  0001 0000

重庆:32,  0010 0000

烤鸭:64,  0100 0000

火锅:128,1000 0000

首先,组成一个,比如北京烤鸭,值就是0101 0000,对应整型就是80,比如重庆火锅,值就是1010 0000,对应的整型就是160

好了,上面是举例,换做在程序里如何体现呢?这里就需要用到或运算

            var 北京 = 16; //0001 0000
            var 重庆 = 32; //0010 0000
            var 烤鸭 = 64; //0100 0000
            var 火锅 = 128;//1000 0000

            var 北京烤鸭 = 0;
            北京烤鸭 = 北京烤鸭 | 北京;
            北京烤鸭 = 北京烤鸭 | 烤鸭;
            Console.WriteLine($"北京烤鸭:{北京烤鸭} / {ConvertErValue(北京烤鸭)}");
            //北京烤鸭:80 / 01010000

            var 重庆火锅 = 0;
            重庆火锅 = 重庆火锅 | 火锅;//顺序不影响
            重庆火锅 = 重庆火锅 | 重庆;
            Console.WriteLine($"重庆火锅:{重庆火锅} / {ConvertErValue(重庆火锅)}");
            //重庆火锅:160 / 10100000

赋值搞定了,某些时候,需要验证,当前值是否是我们想要的,比如验证当前是北京的吗?

接着上面的代码如下:验证就需要用到与运算

            //验证,是否是北京的
            var is北京 = (北京烤鸭 & 北京) == 北京;
            Console.WriteLine($"是北京的吗?答:{is北京}");
            //是北京的吗?答:True
            is北京 = (重庆火锅 & 北京) == 北京;
            Console.WriteLine($"是北京的吗?答:{is北京}");
            //是北京的吗?答:False

            //验证,是否是火锅吗
            var is火锅 = (北京烤鸭 & 火锅) == 火锅;
            Console.WriteLine($"是火锅吗?答:{is火锅}");
            //是火锅吗?答:False
            is火锅 = (重庆火锅 & 火锅) == 火锅;
            Console.WriteLine($"是火锅吗?答:{is火锅}");
            //是火锅吗?答:True

好了,以上就是或运算和与运算的场景,项目中还是挺适用的,以前比较懵,今天领导讲解了下,瞬间就懂了,下面是全部的代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Xml;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {            
            var 北京 = 16; //0001 0000
            var 重庆 = 32; //0010 0000
            var 烤鸭 = 64; //0100 0000
            var 火锅 = 128;//1000 0000

            var 北京烤鸭 = 0;
            北京烤鸭 = 北京烤鸭 | 北京;
            北京烤鸭 = 北京烤鸭 | 烤鸭;
            Console.WriteLine($"北京烤鸭:{北京烤鸭} / {ConvertErValue(北京烤鸭)}");
            //北京烤鸭:80 / 01010000

            var 重庆火锅 = 0;
            重庆火锅 = 重庆火锅 | 火锅;//顺序不影响
            重庆火锅 = 重庆火锅 | 重庆;
            Console.WriteLine($"重庆火锅:{重庆火锅} / {ConvertErValue(重庆火锅)}");
            //重庆火锅:160 / 10100000


            //验证,是否是北京的
            var is北京 = (北京烤鸭 & 北京) == 北京;
            Console.WriteLine($"是北京的吗?答:{is北京}");
            //是北京的吗?答:True
            is北京 = (重庆火锅 & 北京) == 北京;
            Console.WriteLine($"是北京的吗?答:{is北京}");
            //是北京的吗?答:False

            //验证,是否是火锅吗
            var is火锅 = (北京烤鸭 & 火锅) == 火锅;
            Console.WriteLine($"是火锅吗?答:{is火锅}");
            //是火锅吗?答:False
            is火锅 = (重庆火锅 & 火锅) == 火锅;
            Console.WriteLine($"是火锅吗?答:{is火锅}");
            //是火锅吗?答:True
        }


        /// <summary>
        /// 10进制转二进制字符串
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        private static string ConvertErValue(int value)
        {
            var erValue = Convert.ToString(value, 2);
            for (int i = 0, length = 8 - erValue.Length; i < length; i++)
            {
                erValue = "0" + erValue;
            }
            return erValue;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值