國立屏東商業技術學院 資訊工程系 程式設計(一)

0. 章名


0.0.1 位元運算子/Bit Operator

在電腦中,所有的資料都是以二進位的數字來儲存:而最小的單位就是位元,其內儲存的值就是0 和 1。事實上所有的變數內容,都是由一個個位元所組成。

C語言中的位元運算,就是對變數中的每一個位元進行以下的運算:

符號 範例 意義 « x « y 將 x 左移 y 個位元

x»y 將 x 右移 y 個位元

~ ~x 將 x的每一個位元由 0 變 1,由1變0

x

& x & y x 和 y 的每一個位元進行and 運算

x

表5-3﹕位元運算子。

左移和右移是將變數 x 中的資料左移或右移 y 個位元。在此必須注意的是,左移一個變數,c# 的作法是在其最右端加上 0:

int x = 8;

x =x « 2;

在上面的例子裡 x 的值就等於32。因為8的二進位是 1000,左移兩個位元則成為100000,則為十進位的 32。

而右移的動作就較複雜了一點。若該變數大於零,則最右邊的位元被移去,而在最左邊補 0;而若該數小於零,則在最左邊補上 1。

& 運算子則將兩個變數裡的每個位元進行 and 運算。也就是說,若兩個 bit 為 1 時,其 and 才會為 1;反之,則為0。而 | 運算子則進行 or 運算,亦即兩個bit中有一個為 1 則輸出 1。^ 的exclusive or 運算則是,若兩個 bit 皆為 1或 0 時輸出為 0,反之則為 1。~ 運算子則將變數裡每一個位元由 0變 1,或由 1 變 0。如下例所示:

int x = 8,y=9; int a, b,c,d;

a = ~x; b = x & y; c = x | y; d = x ^ y;

以二進位來表示﹕ a = 11111111111111111111111111110111, b = 00000000000000000000000000001000, c = 00000000000000000000000000001001, d = 00000000000000000000000000000001。

必須要注意的是,位元運算只能在 int,uint,long,以及 ulong 的型態上運作。