位操作符
1.位與 &
(1)位與符號是&,按照一個數的二進制位按位與。
(2)位與的真值表:1&1=1,1&0=0,0&1=0,0&0=0.
舉個例子:兩個二進制數分別是 10101010、01111010。所謂位與就是二進制的每一位進行與,即要想把兩個數(十進制、十六進制等)進行位與,必先把其轉化為二進制數才能進行位與。
10101010 &01111010 結果為00101010
2.位或 |
(1)位或符號是|,按照二進制位按位或。
(2)位或的真值表:1|1=1,1|0=1,0|1=1,0|0=0。
舉例:兩個二進制數分別是 10101010、01111010。所謂位或就是二進制的每一位進行或,即要想把兩個數(十進制、十六進制等)進行位與,必先把其轉化為二進制數才能進行位或。
10101010 &01111010 結果為11111010
3.位取反 ~
(1)位取反是~
(2)二進制數按位取反,0變1,1變0,
(3)注意:舉例:int a=45; int b, b=~(~a),取反兩次還是原來的數。
(4)與之相對應的是邏輯取反 ! ,非真即假。結果只有0和1.
4.位異或 ^
(1)按照二進制位異或
(2)真值表:1^1=0,1^0=1,0^1=1,0^0=0;
可總結為每一位相同為0,不同為1.
5.左移<< 右移>>
(1)C語言的移位取決於數據類型,(嵌入式都是研究無符號數的數)
對於無符號數,左移時,右側補零,相當於邏輯移位
對於無符號數,右移時,左側補零,相當於邏輯移位,
對於有符號數,左移時,右側補零,(叫算術移位)
對於有符號數,右移時,左側補符號位(正數補零,負數補1)
總結(重點):
(1)位與,位或,位異或。
位與:(二進制數)與1位與無變化,與0位與變成0;
位或:(二進制數)與1位或變成1,與0位或無變化。
位異或:(二進制數)與1異或會取反,與0異或無變化。
(2)如果要求位與:12&96:第一步:把12、96轉換為二進制數,第二步:每一位按照真值表位與。第三步:把位與之後的結果在轉換成十進制或者十六進制(純粹是為了方便人來看)。(位或、位異或、位取反同位與)
(3)要注意,真值表的1和0都是二進制的,
(4)左移右移是什麼意思?二進制數左移又是什麼意思?分析:一個十進制數10左移一位,也就是說從原來的十位移動到百位,變成了100,十進制的一位是10,左移一位相當於擴大了一位(10倍),再來想二進制,道理是不是一樣的?