今天的文章接續上次的主題,這次我們有 4個選項
當你勾選了兩個選項,你可能會把結果這樣存在陣列。
['加香菜','加筍絲']
而要知道有沒有加香菜,就對陣列做搜尋
如果用二進位來表示就會是這樣
資料表示為 5 ,代表有加香菜加筍絲
5 = 1 + 4
要知道有沒有加筍絲(1)就用 &
如果要問有沒有加滷蛋(2),就是這樣算。
(5 & 2) == 2
// false
所以回到上次文章提到的判斷式,15 = 8 + 4 + 2 + 1
,代表四個選項都有勾的意思
if(( i & 15 ) == 15 ){
// 後續動作...
}
## C# Enum Flages
C# 裡面也可以用 &
|
做位元運算,此外還可以使用列舉型別做具名的位元元算
[Flags]
public enum 加料
{
加香菜=1,
加滷蛋=2,
加筍絲=4,
加油豆腐=8,
全都要 = 加香菜 | 加滷蛋 | 加筍絲 | 加油豆腐
}
這樣就變成
// (5 & 2) == 2
(5 & (int)加料.加滷蛋) == (int)加料.加滷蛋
Linux的權限邏輯也是用位元運算來表示,不過只是一種表示選項的方法,這裡的優點就是一個數字紀錄多種組合。也能用程式判斷出有勾那個項目,並節省記憶體或是資料庫的儲存空間。不過現在硬碟容量不用錢的,拆成多筆儲成陣列也是會比較好維護。畢竟如果沒有 C# Enum 具名代表的話。文件遺失的話,後續的人也無法從程式推敲出 5 代表什麼意思。