场景是这样的,对象属性仅只有一个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


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

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

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 }

完整代码