Day9-28.Bitwise operators

按位操作符


按位操作符用來操作證基本數據類型中的單個“比特”(bit),即二進制位。

按位操作符會對兩個參數中對應的位執行布爾代數運算,並最終生成一個結果。

按位操作符來源於C語言面向底層的操作,在這種操作中經常需要直接操縱硬件,設置硬件寄存器內的二進制位。

Java的設計初衷是嵌入電視機機頂盒內,所以這種面向底層的操作仍被保留了下來。

但是,人們可能不會過多地用到位操作符。

如果兩個輸入位都是1,則按位”與“操作符(&)生成一個輸出位1,否則生成一個輸出位0。

如果兩個輸入位裏只要有一個是1,則按位”或“操作符(|)生成一個輸出位1;

只有在兩個輸入位都是0的情況下,它纔會生成一個輸出位0.

如果輸入位的某一個是1,但不全都是1,那麼按位”異或”操作(^)生成一個輸出位1.

按位“非”(~),也稱爲取反操作符,它屬於一元操作符,只對一個操作數進行操作(其他按位操作符是二元操作符)。

按位“非”生成與輸入位相反的值——若輸入0,則輸出1;若輸入1,則輸出0.

按位操作符和邏輯操作符都使用了同樣的符號,因此我們能方便地記住它們的含義:

由於位是非常“小”的,所以按位操作符僅使用了一個字符。

按位操作符可與等號(=)聯合使用,以便合併運算和賦值:&=、|=和^=都是合法的

(由於“~”是一元操作符,所以不可與“=”聯合使用)。

我們將布爾類型作爲一種單比特值對待,所以它多少有些獨特。

我們可對它執行按位“與”、按位“或”和按位“異或”運算,但不能執行按位“非”(大概是爲了避免與邏輯NOT混淆)。

對於布爾值,按位操作符具有與邏輯操作符相同的效果,只是它們不會中途”短路“。

此外,針對布爾值進行的按位運算爲我們新增了一個“異或”邏輯操作符,它並未包括在“邏輯”操作符的列表中。

在移位表達式中,不能使用布爾運算,原因將在後面解釋。


發佈了28 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章