資料表示法:位元、位元組與數值

位元運算子(AND、OR、XOR、NOT、位移)

大多數算術把一個數當成單一的量,但有時你想伸進去處理它個別的位元——翻轉一個、測試另一個、把兩個模式逐位元組合。位元運算子正是做這件事。它們把兩個值逐位元對齊(或變換一個值的位元),產生一個新模式,獨立地處理每一個位元位置,就像同時對整個數字跑同一個微小的邏輯閘。

有六個要認識的,看過一次就很簡單。AND(寫成 x & y)只在「兩個」輸入都是 1 的位置給 1——它是「只保留共同部分」的運算子,也是遮罩的主力。OR(x | y)在「任一」輸入是 1 的位置給 1——「把這些打開」的運算子。XOR,互斥或(x ^ y),在輸入「相異」的位置給 1——適合切換和偵測變化;一個值與自己 XOR 得到 0。NOT(~x)翻轉每一個位元,把 0 變 1、1 變 0。兩個「位移」把位元橫向滑動:左移(x << n)把位元往高位端移,右邊補零,這會把一個無號值乘以 2 的 n 次方;右移(x >> n)把它們往低位端移,大致是除以 2 的 n 次方。舉個具體例子,0b1100 & 0b1010 是 0b1000,而 0b1100 | 0b1010 是 0b1110,0b1100 ^ 0b1010 是 0b0110。

位元運算子之所以重要,是因為它們讓你把一個整數當成一束緊湊的獨立開/關設定,也因為它們極快——每個各是一條 CPU 指令。它們是遮罩、旗標、底層硬體控制、雜湊和壓縮的基礎。一個常絆倒初學者的尖銳警告:別把位元運算子(& 和 |)和「邏輯」運算子(&& 和 ||)搞混。邏輯那一對評估整個運算式的真假並短路;位元那一對則對實際的位元逐位置運算。把 && 寫成 &(或反過來)能順利編譯,卻悄悄做錯事。

0b1100 & 0b1010 = 0b1000(AND);0b1100 | 0b1010 = 0b1110(OR);0b1100 ^ 0b1010 = 0b0110(XOR);~0b00001111 = 0b11110000(NOT,在 8 位元裡)。而 x << 1 把 x 加倍;x >> 1 把它減半。

每個運算子都獨立作用於每一個位元位置。

位元的 & 和 | 不是邏輯的 && 和 ||:位元的那組組合位元且不短路,而邏輯的那組評估真假且可能略過右運算元——搞混它們能順利編譯,卻行為錯誤。

又称
bit operatorslogical bit operations位元運算