記錄一個常用的一個整型,存儲多個值,利用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 }
完整代碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章