位運算在演算法中的應用

2021-10-04 18:46:25 字數 1559 閱讀 3106

leetcode原題位址

題目描述:給定乙個整數,編寫乙個函式來判斷它是否是 2 的冪次方。

解法:n&(-n)將除最後一位的1之外的所有的數字置為0(因為-n=~n+1,所以n&(-n)==n&(~n+1)),例如

7對應的二進位制為0111 

-7對應的二進位制為1001

7&(-7)=0001

**實現:

public boolean ispoweroftwo(int n)
題目描述:編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 『1』 的個數(也被稱為漢明重量)。

思想:使用n&(n-1)逐個消去最後乙個1

**實現:

public int hc(int n)

return count;

}

原題位址

題目描述:給定乙個非負整數num。對於0 ≤ i ≤ num範圍中的每個數字i,計算其二進位制數中的 1 的數目並將它們作為陣列返回。

思想:使用動態規劃來下實現數字的推導.例如 1(0001)2(0010) 3(0011)  4(0100)   5(0101)  6(0110 )  7(0111)  8(1000)等

1=0+2^0(pop_count(1)=pop_count(0)+1)

2=0+2^1( pop_count(2)=pop_count(0)+1)

3=1+2^1  (pop_count(3)=pop_count(1)+1)  

4=0+2^2(pop_count(4)=pop_count(0)+1);

5=1+2^2(pop_count(5)=pop_count(1)+1);

6=2+2^2(pop_count(6)=pop_count(2)+1);

7=3+2^2(pop_count(7)=pop_count(3)+1)

8=0+2^3(pop_count(8)=pop_count(0)+1)

i+b=i+2^b(ans[i+b]=ans[i]+1);

[0,0)  推導出 [0,1)  推導出 [0,3) 推導出[0,7) 推導出...

**實現:

public int countbit(int num)

i = i >> 1;//右移

}return count;

}

原題鏈結

題目描述:給定乙個正整數,檢查他是否為交替位二進位制數:換句話說,就是他的二進位制數相鄰的兩個位數永不相等。

思想:保留最後一位,然後右移,再判斷是否相同

**實現:

public boolean has_al(int n)

else

}return is_has;

}

下次再寫

位運算在iOS中的使用

本文主要講解三個運算子 左移 與 或 在ios 中如何使用。我們經常能看到下面這樣的 uiview view uiviewalloc init view.autoresizingmask uiviewautoresizingflexiblewidth uiviewautoresizingflexib...

位運算」在程式開發中的妙用!

位運算 位運算子包括 與 非 或 異或 當兩邊運算元的位同時為1時,結果為1,否則為0。如1100 1010 1000 當兩邊運算元的位有一邊為1時,結果為1,否則為0。如1100 1010 1110 0變1,1變0 兩邊的位不同時,結果為1,否則為0.如1100 1010 0110 它適合用在多狀...

指標算數運算在陣列中的應用

一 指標算數運算 我們已經了解到,指標加上乙個整數的結果是另乙個指標。但問題是,它指向 呢?如果將乙個字元指標加1,運算結果產生的指標指向記憶體中的下乙個字元。float佔據的記憶體空間不止1個位元組,如果將乙個指向float的指標加1,將會發生什麼,它會不會指向該float值內部的某個位元組呢?接...