iT邦幫忙

2021 iThome 鐵人賽

DAY 10
1
Software Development

C 語言的簡單入門系列 第 10

【Day 10】C 語言的位元運算子

  • 分享至 

  • xImage
  •  

今天,我們來學位元運算子以及賦值運算子吧!

位元運算子

位元運算子作用於位元,並逐位執行。"&"、"|"、"^"真值表如下:

A B A&B A|B A^B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

簡單介紹一"&"、"|"、"^"這三個運算子:

  • &": 一定要都是 1,輸出才為 1。(似數位邏輯裡的 and 閘)
  • |": 任一為 1,輸出就為 1。(似數位邏輯裡的 or 閘)
  • ^": 相同為 0,不同為 1。(似數位邏輯裡的 xor 閘)

再舉個例子:
如果今天有個變數 A=60,變數 B=13,以二進位表示:A= 00111100  B= 00001101
接下來我們做位元運算:

  1. A&B= 00001100,等於 12
  2. A|B= 00111101,等於 61
  3. A^B= 00110001,等於 49

C 所支援的位元運算還加上"~"、"<<"、">>"

  • ~" : 取反運算子,(~ A) 會得到 61,即 11000011,一個有符號二進位補數形式。
  • <<" : 二進位左移運算子,將一個數的各二進位全部左移若干位(左邊的二進位丟棄,右邊補 0) ex. A<<2,會等於 240,因為本來 A= 00111100,往左移位一次等於 01111000,再移一次等於 11110000,就會等於 240。
  • >>" : 二進制右移運算子。將一個數的各二進位全部右移若干位,正數左補 0,負數左補 1,右邊丟棄。ex. A>>2,會等於 15,因為本來 A= 00111100,往右移一位會等於 00011110 再往右移一位會等於 00001111,就會等於 15。

以上參考
ITREAD01 - 位運算子

上面舉例的,寫成程式會長這樣:

#include<stdio.h>
int main(){
	int A = 60, B = 13 ;
	printf("A&B=%d\n", A&B); 
	printf("A|B=%d\n", A|B); 
	printf("A^B=%d\n", A^B);
	printf("~A=%d\n", ~A);  
	printf("A<<2=%d\n", A<<2);
	printf("A>>2=%d", A>>2);
	return 0; 
}

這是輸出結果:

會發現,程式輸出結果與剛剛舉例推算出的結果是一樣的~

明天,來介紹運算子部分的最後一個小單元 : 賦值運算子!!


上一篇
【Day 09】C 的關係運算子與邏輯運算子
下一篇
【Day 11】C 語言的賦值運算子
系列文
C 語言的簡單入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
joyxin
iT邦新手 4 級 ‧ 2023-05-04 11:25:25

"^": 相同為 1,不同為 0。(似數位邏輯裡的 xor 閘)
應該是相同為0,不同為1?

我要留言

立即登入留言