求乙個數字的掩碼的方法總結

2021-09-02 19:22:58 字數 762 閱讀 7651

對於 00000101,它的掩碼為 00000111。

1 使用integer.highestonebit(int num)方法,如101呼叫這個方法得到4(100),然後左移一位減1得到掩碼(速度最慢)

int mask = (integer.highestonebit(num)<<1)-1;
2 把值為1的mask左移30位,使1放在最高位剩下位為0,然後和num做&運算,直到不得0為止mask要一直右移,此時mask的停留在num的最高位1處,然後左移一位減1得到掩碼

int mask = 1 << 30;

while ((num & mask) == 0) mask >>= 1;

mask = (mask << 1) - 1;

3 用num與num左移的數字做或運算賦給num(速度最快),例如對於 10000000 這樣的數要擴充套件成 11111111,可以利用以下方法:

mask |= mask >> 1 11000000

mask |= mask >> 2 11110000

mask |= mask >> 4 11111111

int mask = num;

mask |= mask >> 1;

mask |= mask >> 2;

mask |= mask >> 4;

mask |= mask >> 8;

mask |= mask >> 16;

求乙個數字陣列裡的最大連續數字的個數

問題 求乙個數字陣列裡的最大連續數字的個數。比如 3,4,4,4,2,2,3,4 return 3。此題為google的面試題。分析 設定兩個變數 全域性最大連續數字個數 maxsucc 以及區域性連續數字個數 temp。從第二個數字開始,如果當前數字比前乙個數字大1,則 temp 遇到不滿足條件的...

求乙個數約數的個數

求約數的個數 計算乙個整數的約數個數 輸入格式 輸入乙個整數 輸出格式 輸出一行,為輸入整數的約數的個數 樣例輸入 10 樣例輸出 4ac import math number int raw input count 0 sqrt float math.sqrt number if number s...

求圓圈中剩下的最後乙個數字

n個數字 0,1,n 1 形成乙個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字 第乙個為當前數字本身,第二個為當前數字的下乙個數字 當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。求出在這個圓圈中剩下的最後乙個數字。這個問題在wiki上叫約瑟夫斯問題。一開始的序列是 s n n 1,...