【無符號右移】
無符號右移運算子「>>>」 - 同右移,但是結果全變正數。
【或】
|= 或運算 二進位制中只要乙個為1就為1
在hashmap原始碼中有相關操作,直接分析原始碼如下
//返回給定目標容量的2倍冪。將我們傳入的容量設定為大於並最接近的2^n
//補位,將原本為0的空位填補為1,最後加1時,
//最高有效位進1,其餘變為0,如此就可以取到最近的2的冪
static final int tablesizefor(int cap)
* 例1:
* 輸入長度為6
* 6-1=5
* 0000 0101 無符號右移一位
* 0000 0010 按位或
* 0000 0111 無符號右移兩位
* 0000 0001 按位或
* 0000 0111 無符號右移四位
* 0000 0000 按位或
* 結果不變,同上
* 例2:
* 輸入長度為5
* 5-1=4
* 0000 0100
* 0000 0010
* 0000 0110
* 0000 0011
* 0000 0111
* 0000 0000
* 0000 0111
* 後續結果不變
找大於等於乙個數的最小的2 n
最近看hashmap原始碼時,發現給定初始capacity計算threshold的過程很巧妙。1 static final int tablesizefor int cap 這裡是實現了找大於等於cap的最小2 n。cap為int型別,長度32位。對於乙個正數,找大於該數的最小的2 n,都可以採用這...
如何在乙個集合中取乙個最接近某個數的數
問題場景 思路 有彩蛋哦 今天同事問了乙個問題,如何在乙個集合中取乙個最接近某個數的數,腦海各種演算法 揹包,圖論,動態規劃 在飄,讓我回想起了大二acm演算法競賽期間的生活。acm真的是讓我又愛又恨 愛,當你掌握一種演算法ac出題目的時候是真的爽 恨,演算法是真的難理解 當時還想著打遊戲,打籃球,...
數字題2 求乙個陣列的全部子集
問題描述 一共16個,事實上n個元素的集合的子集共有2n 個 包含空集 方法一 遞迴 定義乙個元素陣列mark 用來存放第i個元素,當第i個元素不出現在子集中,對應的位置為空。偽 如下 共n個元素,每個元素取或不取,subset 判斷第i個元素 方法二 位操作 集合set 對於任意乙個元素,在每個子...