C 速查手冊- 3.5 位元運算子 - 程式語言教學誌

文章推薦指數: 80 %
投票人數:10人

以下例子示範位元運算子且、或、互斥或 #include int main(void) { int a = 0x101; int b = 0x11; printf("%x\n", a & b); printf("%x\n", a | b); ... C速查手冊 3.5位元運算子 資料(data)儲存在電腦中的方式為利用0與1的編碼,例如八位元的整數25為 00011001 另如ASCII編碼中的字母f為 01100110 所謂的位元運算,就是逐位元(bit)進行比較,例如以上兩項編碼做邏輯或的位元運算    00011001 or01100110 結果會是 01111111 C語言的位元運算子如下表 運算子功能範例 &且a&b |或a|b ^互斥或a^b <>向右位移a>>b ~取1的補數~a 以下例子示範位元運算子且、或、互斥或 #include intmain(void) { inta=0x101; intb=0x11; printf("%x\n",a&b); printf("%x\n",a|b); printf("%x\n",a^b); return0; } /*《程式語言教學誌》的範例程式 http://kaiching.org/ 檔名:bitlogic.c 功能:示範位元運算子且、或、互斥或 作者:張凱慶*/ 編譯後執行,結果如下 $gccbitlogic.c $a.out 1 111 110 $ 這裡我們整數採用十六進位的表示方法,同時在十六進位中每一位元只用0跟1兩種數字,因此可看成如同只有0跟1的二進位一般。

由此a且b,由於只有最右邊的位元相同,所以結果為0x1,其餘可類推。

以下例子示範位元向左位移跟向右位移運算子 #include intmain(void) { inta=0x100; intb=0x4; printf("%x\n",a<>b); return0; } /*《程式語言教學誌》的範例程式 http://kaiching.org/ 檔名:bitshift.c 功能:示範位元運算子向左及向右位移 作者:張凱慶*/ 編譯後執行,結果如下 $gccbitshift.c $a.out 1000 10 $ 就整數型態而言,向左位移一個位元等於原數字乘上2,向右位移一個位元等於原數字除以2,所以向左位移4個位元等於原數字乘上16,這對十六進位來講就等同向左進一位,向右位移4個位元可依此類推。

以下例子示範位元取1的補數運算子 #include intmain(void) { inta=0x0; intb=0x56789102; intc=0x100; printf("%x\n",~a); printf("%x\n",~b); printf("%x\n",~c); return0; } /*《程式語言教學誌》的範例程式 http://kaiching.org/ 檔名:bitnot.c 功能:示範位元取1的補數運算子 作者:張凱慶*/ 編譯後執行,結果如下 $gccbitnot.c $a.out ffffffff a9876efd ffffffff $ 所謂取1的補數運算子就是把所有的0變成1,1變成0,簡單說就是原數字與補數相加會等於全部的位元皆為1,所以就十六進位來講,會是全部的位數都為f。

上一頁3.4邏輯運算子 回C速查手冊首頁 下一頁3.6cast運算子 回C教材首頁 回程式語言教材首頁



請為這篇文章評分?