其實(shí)網(wǎng)上很多大佬有寫這個(gè)啦老虫,但是自己覺得很有趣就決定叭叭一篇博客出來叶骨,為了方便看就用pad畫圖了茫多。寫的很淺顯,沒什么大作用就是覺得很好玩(:-)∠L)
位掩碼其實(shí)就是應(yīng)用位運(yùn)算來實(shí)現(xiàn)一些復(fù)雜的操作忽刽,利用二進(jìn)制的0和1來實(shí)現(xiàn)天揖。
比如很有名的小白鼠試毒問題。
假設(shè)有八杯水跪帝。有一杯水有毒今膊,小白鼠喝下24小時(shí)后會(huì)死,現(xiàn)在需要在24小時(shí)內(nèi)檢驗(yàn)出哪杯水有毒伞剑。問題:需要幾只小白鼠斑唬?怎么檢驗(yàn)?
這是一個(gè)典型的利用位掩碼處理的問題黎泣。根據(jù)題目條件恕刘,必須利用小白鼠的死亡情況一次檢測(cè)出哪杯水有毒。問題的處理方式如下:
我們將八杯水編號(hào)為1-8抒倚,每杯水用二進(jìn)制表示褐着,將每列的混合水分別喂給ABCD四只小白鼠。比如A鼠將喝下八號(hào)水托呕,而C鼠將喝下4/5/6/7的混合水:
24小時(shí)后記錄小白鼠的死亡狀態(tài)含蓉。
比如AC小鼠存活频敛,BD小鼠死亡,那么我們可以得到一串二進(jìn)制:0101
即可知道5號(hào)水有毒馅扣。
如果設(shè)定一千杯水中有一杯有毒斟赚,則需要10小白鼠,原理與上面描述類似差油。
下面介紹下位掩碼在實(shí)際中的應(yīng)用:
比如汁展,我們?cè)O(shè)立一個(gè)OA系統(tǒng),它的基本功能是增厌殉,刪食绿,改,查公罕,那么我們定義每個(gè)用戶的權(quán)限可以寫成:
var user =
{
add: true,
delete: false,
update: false,
search: true
};
但如果用位掩碼器紧,設(shè)立一個(gè)四位的二進(jìn)制數(shù),其第一位為1表示add權(quán)限楼眷,第二位為1表示刪除權(quán)限铲汪,以此類推。在表示某一用戶擁有某些權(quán)限時(shí)就會(huì)變得非常省事罐柳。
具體更多的應(yīng)用及描述可以參考一下這個(gè)文檔
https://blog.csdn.net/weixin_42856903/article/details/104357501