位運算簡介及使用技巧?在計算機程序中所有的數都是以二進制形式存儲的位運算就是直接對整數在二進制進行計算操作作為一名程序員掌握位運算的基本使用是很重要的,而對于算法程序員來說,位運算的靈活使用能夠更靈活高效的解決很多問題,我來為大家科普一下關于位運算簡介及使用技巧?以下内容希望對你有幫助!
在計算機程序中所有的數都是以二進制形式存儲的。位運算就是直接對整數在二進制進行計算操作。作為一名程序員掌握位運算的基本使用是很重要的,而對于算法程序員來說,位運算的靈活使用能夠更靈活高效的解決很多問題。
位運算都有哪些
符号 |
描述 |
運算規則 |
& |
與 |
同為1時結果為1,其它為0 |
或 | ||
^ |
異或 |
相同為0,不同為1 |
~ |
取反 |
0變1,1變0 |
<< |
左移 |
各位左移,高位丢棄,低位補0 |
>> |
右移 |
各位右移,低位丢棄,如果該數為正則高位補0;反之補1 |
>>> |
無符号右移 |
又稱邏輯右移,不管正負,高位補0 |
參加運算的兩個數按二進制進行與運算。
0&0=0
0&1=0
1&1=1
用途:
清零
任何數與0做與運算結果都為0。
取指定位
比如要取一個數的低4位,則隻需使用該數與(0000 1111)做與運行,結果就是這個數的低4位的值。
奇偶判斷
隻要二進制的末尾為0則是偶數,為1則為奇數。因此可用 (x&1)==0判斷是否是偶數。
按位或(|)參加運算的兩個數按二進制進行或運算。
0|0=0
0|1=1
1|1=1
用途:
将某位設置為1
如X=0101,需要将第2位設置為1,結果變為0111,則隻需和(0010)進行或運算,0101|0010=0111。
按位異或(^)參加運算的兩個數按二進制進行異或運算。
0^0=0
0^1=1
1^1=0
用途:
翻轉指定位
如要将X=0101 1010的低4位翻轉為0101,則隻需和Y=0000 1111進行異或運行,X^Y=0101 0101 。
交換兩數值
如X=0101,Y=0100,需要将X和Y的值進行交換。
x ^= y; // x= 0101 ^ 0100 = 0001
y ^= x; // y = 0100 ^ 0001 = 0101
x ^= y; // x = 0001 ^ 0101 = 0100
參加運算的1個數據各位值0變1,1變0.
~0101=1010
用途:
取反運算和用于快速獲得某個特定值,如獲取一個最低位為0其他位為1的數,則對1進行取反即可,~1。
左移運算符(<<)參與運算的1個數據各位左移,高位丢棄,低位補0。
0101 << 1 = 1010
如果左移的數最高位不等于1,則相當于乘2。
右移運算符(>>)參與運算的1個數據各位右移,如果該數為正則高位補0,反之補1,低位丢棄。
0101 >> 1 = 0010
某數進行右移運算相當于除以2。
無符号右移運算符(>>>)又稱邏輯右移,不管正負,高位補0。
0101>>>1=0010
如負數-5進行右移操作,結果如下。(-5的二進制表示為11111111111111111111111111111011)
11111111111111111111111111111011>>>1=01111111111111111111111111111101
注:負數的二進制表示形式為補碼。
有哪些騷操作技巧一
x & (x - 1) 用于消去x最後一位的1
應用:檢測整數x是否是2的次幂
思路:2的次幂滿足以下條件:
- 大于0
- 隻有1個位是1
則x & (x - 1)的結果如果等于0則表示x是2的次幂。
技巧二
a ^ b ^ b = a
一個數據集合中,隻有1個數字出現1次,其他數字都出現兩次,找出這個數。
思路:隻需要将所有數據進行異或運算,結果就是這個數。
一個數據集合中,隻有2個數字出現過1次,其他數字都出現過兩次,找出這兩個數。
思路:假設這兩個數是X,Y,所有數字進行異或的結果就是X^Y,因為異或運算邏輯是相同為0,不同為1,則找出這個結果的二進制中等于1的位置,然後将所有數字按照該位是否為1分成兩部分,那麼X和Y會被分開,然後分别做異或運算,結果便是X和Y.
小結位運算在各大互聯網公司的面經中經常會出現,各種算法題中也高頻使用,希望本文能讓你對位運算有一個初步的認識。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!