國立屏東商業技術學院 資訊工程系 程式設計(一)
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 的型態上運作。