運算子
位運算子是用來對位元組或位元組中的位進行運算的符號,參加位運算的運算元必須是整型常量或變數。通常,我們把要進行位運算的變數說明為 unsigned 型別。c 語言提供了六種運算子。他們是位與(&)、位或(|)、位異(^)、左移(<<)、右移(>>)和取反(~)。這六種運算子的運算規則如下:
位與(&):
兩個相應位上的值全 1,則改位的結果值為 1,否則為0。即:位或(|):1&0為 0, 0&1 為 0,0&0為0, 1&1為1
兩個相應位上的值全0,則該位的結果值為0,否則為1.即:位異(^):1|0為1,0|1為1,0|0為0,1|1為1
兩個相應位上的值相同,則該位的結果值為0,不相同為1.即:左移(<<):1^1為0,0^0為0,1^0為1 0^1為1
是用來將左運算元的各個二進位制位按右運算元給出的值向左移動。運算元移位後,右端出現的空位補零,而移出左端的高位被捨棄。例如:右移(>>),設 a 的值為十進位制數 15,即二進位制 00001111,則 a << 2 後得 00111100,即十進位制數字60。
是用來將左運算元的各個二進位制數按右運算元給出的值向右移動。運算元移位後,左端出現的空位補零,而移出右端的低位被捨棄。例如:取反(~),設b的值為十進位制數字28,即二進位制數 00011100,則 b >> 2後得 00000111,即十進位制數字7。
是用來將運算元按位取反,即運算元的相應位上的值為1時變換成0,為0時變換成1,即 ~0 為1,~1為0。
通過上面的介紹,現對位運算子的運算規則做一小結。如下:
運算子名稱
預算規則
&
位與兩個相應位全 1 為 1,其餘為 0|位或
兩個相應位全 0 為 0,其餘為 1
^位異或
兩個相應位相同為 0,不相同為 1
<<
左移
把左運算元左移指定的位數
>>
右移把左運算元右移指定的位數~取反
把運算元各位 0 變 1,1 變 0。
下面舉乙個位運算子的應用示例。
例題:
寫乙個程式,將整數 x 的低位元組作為整數 z 的低位元組,整數 y 的低位元組作為整數 z 的高位元組。
步驟:
a. 將整數 x 的低位元組取出,高位元組置零。即x & 0x00ff
b. 將整數 y 的低位元組移至高位元組,低位元組再置零。即
(y & 0x00ff)<<8
c. 將上面兩者的結果進行合併。即
(x & 0x00ff) | (y & 0x00ff) <<8
程式如下:
main()執行結果如下:
cd31
java中的位運算子
我記得第一次聽說位運算子好像是從大二的微機原理,那個時候學並不好,後來程式設計好像也沒有用到過,但是最近在複習一些東西的時候,發現這才是最終要的基礎,比起算術運算子高階大氣上檔次多了。下面就對今天覆習的位運算子做一下筆記 按位與。按位或。按位非。按位異或。右位移運算子。無符號右移運算子。關於前面幾個...
java位運算子
按位與運算子 參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。與運...
Java位運算子
今天在學習 hashmap 的時候,發現這麼一段 static final int tablesizefor int cap 方法的作用就是,輸入乙個數,如果該數為2的冪次方,那麼將原數返回回去,如果不是,那麼會返回另乙個數,也會是2的冪次方。看完我就覺得我該好好看看位運算子了。位運算子主要針對二進...