巴扎黑2017-04-17 18:02:22
他們都是二進制運算符,都是彙編下概念,一般來講,用不上。
但是由於他們較為底層的運算符,所以運算起來速度飛起,在常規操作中也能用上。
例如:
與運算子一般用來清零。
與運算子可以用來轉換一個整數到短整數(實際上是把dword轉為word)。
0xffffeeee&0xffff=0xeeee
或運算一般用來補碼。
例如一個整數型是4個位元組,32個位元組,就表示他能做一個容納32位元的配置所在。 (TRUE
/FALSE
),这个时候可以用或
來將某位置1。
異或一般用來加密
除此之外還有左移當乘法,右移當除法等奇淫異巧。
這方面知識點太多了,一般沒必要特意學習。如果對二進制了解多的話自然就明白了。老實講,有一定難度。
我打了半天字,估計能看懂的也沒幾個。 。
PHPz2017-04-17 18:02:22
位元運算在嵌入式和驅動程式設計方面運用的更多一點,有關直接操作暫存器的情況下會用上,在應用層方面貌似並不多。
不過我印像中倒是有很多奇淫技巧會用上,我印象最深刻的是leetcode上面的一道題:
LeetCode 136. Single Number
題目很簡單,要求是找出唯一一個在陣列中出現一次的整數,而其他都會出現兩次。
通常的想法都是打表,然而數組大了之後速度很慢,然後就有了按位異或的演算法。
直接把數組的所有數字按位異或,最後剩下的那個數字就是所求,至於是為什麼可以去網上搜看。
黄舟2017-04-17 18:02:22
舉個實際場景中的例子
配置一個位元組中某幾位的值。
範例:
要設定這個變數的某一位,用位元或a = a|0x01 ,這是設定了最後一位,要提取某一位的值,可以用按位與b = a&0x01 這是提取最後一位的值。