求乙個數字大於並最接近的2 N

2021-10-25 18:33:38 字數 765 閱讀 2823

無符號右移

無符號右移運算子「>>>」 - 同右移,但是結果全變正數。

【或】

|=   或運算  二進位制中只要乙個為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 對於任意乙個元素,在每個子...