位運算子 移位運算子

2022-08-16 03:18:15 字數 2000 閱讀 5672

按位操作符用來操作整數基本資料型別中的單個位元(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...