位操作的基礎與應用舉例

2021-07-30 23:46:42 字數 1232 閱讀 8932

通過在leetcode上面做題發現,位操作是乙個非常實用但是容易被忽略的技巧。

所以在這篇文章中歸納常用的位操作基礎和技巧,並通過例子來直觀地理解位操作的實際應用。

在計算機中所有資料都是以二進位制的形式儲存的。位運算其實就是直接對在記憶體中的二進位制資料進行操作,因此處理資料的速度非常快。在實際程式設計中,如果能巧妙運用位操作,完全可以達到四兩撥千斤的效果。因此本文將對位操作進行如下方面總結:

一、位操作基礎:用一張表描述位操作符的應用規則並詳細解釋。

二、常用位操作小技巧:判斷奇偶、判斷乙個數是否是2的方冪、計算二進位制中1的個數。

需要注意:1、位操作只能用於整形資料,對float和double型別進行位操作會被編譯器報錯。

2、位操作符的運算優先順序比較低,應盡量使用括號來確保運算順序。

3、位操作還有一些復合操作符,如&=、|=、 ^=、<<=、>>=。

1、判斷奇偶

只要根據最未位是0還是1來決定,為0就是偶數,為1就是奇數。因此可以用if ((a & 1) == 0)代替if (a % 2 == 0)來判斷a是不是偶數。

下面程式將舉例如何應用:

int a

;if (a & 1)

if ((a & 1) == 0)

2、判斷乙個數是否是2的方冪首先要理解n&(n-1)作用:將n的二進位制表示中的最低位為1的改為0。

舉個例子:

n = 10100(二進位制),則(n-1) = 10011 ==> n&(n-1) = 10000

可以看到原本最低位為1的那位變為0。

該問題的**為:

n > 0 && ((n & (n - 1)) ==0 )
如果((n & (n-1)) == 0),則二進位制的最高位為1,其餘位均為0,所以n是2的冪。

3、計算二進位制中1的個數

**如下:

while (n > 0)
該技巧的應用可以參考leetcode上的《461. hamming distance》。

python應用舉例 python基礎舉例應用

將下述兩個變數的值交換 s1 alex s2 sb s1,s2 s2,s1 print s1,s2 判斷下述結果 msg1 alex say my name is alex,my age is 73,my is female msg2 alex say my name is alex,my age ...

Java中的位操作使用舉例

本文的目的不是為了闡述位操作的原理,而是發現在工作中有些同學清楚位操作,但是不知道什麼時候使用位操作。以下列舉兩個例子簡單說明我們可以使用到位操作的場景,但不一定符合實際業務場景,僅供參考。1 給40 億個int 型的正整數,沒排過序,然後再給乙個數,如何快速判斷這個數是否在那 40public c...

C語言位操作的神應用(位操作)

不少 通過位操作,解題很巧妙,學習語言,就要學其精髓,學其底層,不可蜻蜓點水 例一 函式getbits x,p,n 返回x中從右邊數第p位開始向右數n位的字段 unsigned getbits unsigned x,int p,int n return x p n 0 x p n 把期望獲得的字段移...