国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用2的冪表示可多項選擇的狀態

2019-11-14 13:02:59
字體:
來源:轉載
供稿:網友

我們在學習linux權限指令時,想必大多數人都會疑惑為啥用1,2,4來表x,w,r的權限,而不是1,2,3就行了。 實際工作中,我們也經常需要用到各種組合的狀態,類似權限,每個權限并不唯一只有x,w,r,而是x,w,r任意組合。所以我們就需要任意組合的數字不重復。用2的冪就可以達成這樣的效果。用1,2,3的話,比如x和w(1+2=3),就與r重復了。

除了以上任意組合的唯一性外,還有個好處,就是代碼可以很好的用到位運算,顯得有效率且簡潔

比如java nio 的 SelectionKey

public static final int OP_READ = 1 << 0; public static final int OP_WRITE = 1 << 2; public static final int OP_CONNECT = 1 << 3; public static final int OP_ACCEPT = 1 << 4;

當表示多個組合的時候,用|

int interestSet = SelectionKey.OP_READ | SelectionKey.OP_WRITE;

當判斷是否含有某種狀態時

public final boolean isReadable() { return (readyOps() & OP_READ) != 0; }

關于2的冪

由于計算機的識別是二進制的,所以2的冪在項目源碼中非常常見。 比如hashmap的數組長度,就是2的冪,有兩個原因。 1、2^n & hash = hash % 2^n, 這個是在求key所在的數組位置。只有2的冪,該等式才相等。在源碼里基本都是位運算的,效率更好。 2、 2^n 散列的效果是好于其他的。(在其他文章看到的,有例子)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永兴县| 新乡市| 霍城县| 西青区| 青神县| 阿鲁科尔沁旗| 兴和县| 颍上县| 宜君县| 河北区| 尉犁县| 棋牌| 新绛县| 武川县| 海林市| 翼城县| 乌鲁木齐市| 闵行区| 大同市| 康乐县| 闽侯县| 剑川县| 房产| 乌鲁木齐市| 澄江县| 商都县| 萨嘎县| 江城| 汶上县| 南康市| 兴文县| 莱芜市| 阜南县| 隆林| 兴化市| 延边| 辽中县| 呼玛县| 安阳市| 内江市| 呼图壁县|