按位操作符用來操作整數基本資料型別中的單個位元(bit),就是二進位制,按位操作符會對兩個引數中對應的位(bit)執行布林運算,最終生成乙個結果。下面我們來看一下都有哪些位運算子。
ok,有人看了之後可能會問,與、或、異或這三個符號不是邏輯運算子嗎,怎麼又成了位運算子?
其實,我們知道,任何資訊在計算機中都是以二進位制的形式儲存的,既然它們可以對布林值進行運算,那麼」&」、「|」、「^」除了可以作為邏輯運算子就也可以作為位運算子了。位運算是直接對二進位制進行運算。他們對兩個運算元中的每乙個二進位制位都進行運算。
首先,我們先將規律羅列出來:
可以把1當做true
0當做false
只有參與運算的兩位都為1,&運算的結果才為1,否則就為0。
只有參加運算的兩位都是0,| 運算的結果才是0,否則都是1。
只有參加運算的兩位不同,^ 運算的結果才為1,否則就為0。
單單這麼看,大家可能還不知道怎麼回事,我們來舉幾個例子。
1.& 與運算
這樣是不是就很清晰了呢?
2.| 或運算
3.^ 異或運算
4.取反操作
其實,表面上看起來,取反操作是乙個比較難理解的操作。但實際上,取反操作還是相對簡單的。
我們有乙個清晰的思路,那就是將乙個十進位制數表示為二進位制數,然後對其取反,也就是將二進位制數的1變成0,0變成1。
但是,我們面對這個問題,出現的情況是多種的,這個思路還不足以滿足要求,讓我們來看看具體的操作流程。
流程如下:
1.先將這個數的原碼寫出來,如果是正數,則二進位制數最高位寫0,負數則是1
2.求出這個二進位制數的補碼,正數的補碼是其本身,負數的補碼計算方法是:最高位數值不變,其餘位求反,再按照正常的加法操作加1。
3.對補碼進行求反
4.求反後的補碼按照正常的減法操作減1(注意二進位制是滿二進一)
5.對除去當前二進位制數最高位的其餘位數進行求反
6.求出最終的值,最高位代表的是當前數字的正(0)負(1)號
這個操作方法親測可用,這只是其中的乙個方法,大家可以搜尋一下其他的方法。
<< 左移、>> 右移、>>> 無符號右移
移位操作符有如上幾種。
對於這部分,我不做過多的解釋,用幾個圖來表示一下就可以了。
1.《左移
栗子:6<<2
也就是說,左移符號左邊是運算元,右邊是移動的位數,左移動的兩位數丟棄,空餘出來的右側用0來補充,所以,左移位數越多,數字是越大的。
2.>>右移
栗子:6>>2
右移操作符有兩種情況,當運算元的最高位是1時,空餘位補1,是0時補0。
3.>>>無符號右移
無符號右移的情況和右移類似,只是,這種移動方法,無論運算元二進位制數最高位是0還是1,空餘位都補0。
個人部落格:
位運算子和移位運算子
golang中有3個位運算 按位與 按位或 按位異或 按位與 兩位全為1,結果為1,否則為0 按位或 兩位有乙個為1,結果為1,否則為0 按位異或 兩位乙個為0,乙個為1,結果為1,否則為0 例如 2 3 2 2的補碼0000 0010 3的補碼0000 0011 2 3 0000 0010 2 2...
位運算 移位運算子
一 位 bit 運算子 位運算子 運算子含義 與 and 或 or 異或 取反 規則 可以把1當做true 0當做false 只有參與運算的兩位都為1,運算的結果才為1,否則就為0。只有參加運算的兩位都是0,運算的結果才是0,否則都是1。只有參加運算的兩位不同,運算的結果才為1,否則就為0。1 與運...
C 位運算子詳解 異或運算子和移位運算子
什麼是位運算 位運算子按二進位制進行運算,這些運算子只能用於整數型別的操作。如 char,short,int,longbqclwf 通過位運算子來獲取高位值和低位值 int a 0x1234 int high,low high a 8 0x00ff low a 0x00ff 左移運算子和www.cp...