場景是這樣的,對象屬性僅只有一個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 }