记录一个常用的一个整型,存储多个值,利用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 }
完整代码

 

posted @ 2022-01-12 15:22  吃奶嘴的路飞  阅读(34)  评论(0编辑  收藏  举报