记录一个常用的一个整型,存储多个值,利用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
好了,上面是举例,换做在程序里如何体现呢?这里就需要用到或运算
1 var 北京 = 16; //0001 0000 2 var 重庆 = 32; //0010 0000 3 var 烤鸭 = 64; //0100 0000 4 var 火锅 = 128;//1000 0000 5 6 var 北京烤鸭 = 0; 7 北京烤鸭 = 北京烤鸭 | 北京; 8 北京烤鸭 = 北京烤鸭 | 烤鸭; 9 Console.WriteLine($"北京烤鸭:{北京烤鸭} / {ConvertErValue(北京烤鸭)}"); 10 //北京烤鸭:80 / 01010000 11 12 var 重庆火锅 = 0; 13 重庆火锅 = 重庆火锅 | 火锅;//顺序不影响 14 重庆火锅 = 重庆火锅 | 重庆; 15 Console.WriteLine($"重庆火锅:{重庆火锅} / {ConvertErValue(重庆火锅)}"); 16 //重庆火锅:160 / 10100000
赋值搞定了,某些时候,需要验证,当前值是否是我们想要的,比如验证当前是北京的吗?
接着上面的代码如下:验证就需要用到与运算
1 //验证,是否是北京的 2 var is北京 = (北京烤鸭 & 北京) == 北京; 3 Console.WriteLine($"是北京的吗?答:{is北京}"); 4 //是北京的吗?答:True 5 is北京 = (重庆火锅 & 北京) == 北京; 6 Console.WriteLine($"是北京的吗?答:{is北京}"); 7 //是北京的吗?答:False 8 9 //验证,是否是火锅吗 10 var is火锅 = (北京烤鸭 & 火锅) == 火锅; 11 Console.WriteLine($"是火锅吗?答:{is火锅}"); 12 //是火锅吗?答:False 13 is火锅 = (重庆火锅 & 火锅) == 火锅; 14 Console.WriteLine($"是火锅吗?答:{is火锅}"); 15 //是火锅吗?答:True
好了,以上就是或运算和与运算的场景,项目中还是挺适用的,以前比较懵,今天领导讲解了下,瞬间就懂了,下面是全部的代码:
1 using Newtonsoft.Json; 2 using Newtonsoft.Json.Serialization; 3 using System; 4 using System.Collections.Generic; 5 using System.Diagnostics; 6 using System.Globalization; 7 using System.Linq; 8 using System.Text; 9 using System.Text.RegularExpressions; 10 using System.Threading.Tasks; 11 using System.Xml; 12 13 namespace ConsoleApp2 14 { 15 class Program 16 { 17 static void Main(string[] args) 18 { 19 var 北京 = 16; //0001 0000 20 var 重庆 = 32; //0010 0000 21 var 烤鸭 = 64; //0100 0000 22 var 火锅 = 128;//1000 0000 23 24 var 北京烤鸭 = 0; 25 北京烤鸭 = 北京烤鸭 | 北京; 26 北京烤鸭 = 北京烤鸭 | 烤鸭; 27 Console.WriteLine($"北京烤鸭:{北京烤鸭} / {ConvertErValue(北京烤鸭)}"); 28 //北京烤鸭:80 / 01010000 29 30 var 重庆火锅 = 0; 31 重庆火锅 = 重庆火锅 | 火锅;//顺序不影响 32 重庆火锅 = 重庆火锅 | 重庆; 33 Console.WriteLine($"重庆火锅:{重庆火锅} / {ConvertErValue(重庆火锅)}"); 34 //重庆火锅:160 / 10100000 35 36 37 //验证,是否是北京的 38 var is北京 = (北京烤鸭 & 北京) == 北京; 39 Console.WriteLine($"是北京的吗?答:{is北京}"); 40 //是北京的吗?答:True 41 is北京 = (重庆火锅 & 北京) == 北京; 42 Console.WriteLine($"是北京的吗?答:{is北京}"); 43 //是北京的吗?答:False 44 45 //验证,是否是火锅吗 46 var is火锅 = (北京烤鸭 & 火锅) == 火锅; 47 Console.WriteLine($"是火锅吗?答:{is火锅}"); 48 //是火锅吗?答:False 49 is火锅 = (重庆火锅 & 火锅) == 火锅; 50 Console.WriteLine($"是火锅吗?答:{is火锅}"); 51 //是火锅吗?答:True 52 } 53 54 55 /// <summary> 56 /// 10进制转二进制字符串 57 /// </summary> 58 /// <param name="value"></param> 59 /// <returns></returns> 60 private static string ConvertErValue(int value) 61 { 62 var erValue = Convert.ToString(value, 2); 63 for (int i = 0, length = 8 - erValue.Length; i < length; i++) 64 { 65 erValue = "0" + erValue; 66 } 67 return erValue; 68 } 69 70 } 71 }