逍遙自在學C語言 | 位運算子的基礎用法

知微之見發表於2023-04-08

前言

一、人物簡介

  • 第一位閃亮登場,有請今後會一直教我們C語言的老師 —— 自在。

  • 第二位上場的是和我們一起學習的小白程式猿 —— 逍遙。

二、構成和表達方式

  • 位運算子是一組用於在二進位制數之間進行操作的運算子
運算子 名稱 示例
& 位與 a && b
| 位或 a | b
^ 位異或 a ^ b
~ 位取反 ~a
<< 二進位制左移 a << 2
>> 二進位制右移 a >> 2

三、位運算子的應用

1、位與運算子 (&)

  • 位與運算子用符號 & 表示。

  • 如果兩個運算元的對應位都為1,則位與運算的結果為1,否則結果為0

  • 示例程式碼

#include <stdio.h>

int main() {
  int a = 13; //二進位制表示為0b1101
  int b = 11; //二進位制表示為0b1011
  int c = a & b;
  printf("%d\n", c); //輸出結果為9,二進位制表示為0b1001
  return 0;
}

2、位或運算子 (|)

  • 位或運算子用符號 | 表示。

  • 如果兩個運算元的對應位中至少有一個為1,則位或運算的結果為1,否則結果為0。

  • 示例程式碼

#include <stdio.h>

int main() {
  int a = 13; //二進位制表示為0b1101
  int b = 11; //二進位制表示為0b1011
  int c = a | b;
  printf("%d\n", c); //輸出結果為15,二進位制表示為0b1111
  return 0;
}

3、位異或運算子 (^)

  • 位異或運算子用符號 ^ 表示

  • 如果兩個運算元的對應位不同,則位異或運算的結果為1,否則結果為0

  • 示例程式碼

#include <stdio.h>
int main() {
  int a = 13; //二進位制表示為0b1101
  int b = 11; //二進位制表示為0b1011
  int c = a ^ b;
  printf("%d\n", c); //輸出結果為6,二進位制表示為0b0110
  return 0;
}

4、位取反運算子 (~)

  • 位取反運算子用符號 ~ 表示

  • 它會對運算元的每個二進位制位取反,即0變成1,1變成0

  • 示例程式碼

#include <stdio.h>

int main() {
  int a = 13; //二進位制表示為0b1101
  int b = ~a;
  printf("%d\n", b); //輸出結果為-14,二進位制表示為0b11111111111111111111111111110010
  return 0;
}

5、左移運算子 (<<)

  • 左移運算子用符號 << 表示

  • 它將運算元的所有二進位制位向左移動指定的位數,並在低位填充0

  • 示例程式碼

#include <stdio.h>

int main() {
  int a = 13; //二進位制表示為0b1101
  int b = a << 2;
  printf("%d\n", b); //輸出結果為52,二進位制表示為0b110100
  return 0;
}

6、右移運算子 (>>)

  • 右移運算子用符號 >> 表示。

  • 它將運算元的所有二進位制位向右移動指定的位數,並在高位填充0或1(具體取決於運算元的符號)

  • 示例程式碼

#include <stdio.h>

int main() {
  int a = 13; //二進位制表示為0b1101
  int b = a >> 2;
  printf("%d\n", b); //輸出結果為3,二進位制表示為0b0011
  return 0;
}

小結

透過本文的講解,我們學會了6種位運算子的基礎用法,在接下來的文章中,將會繼續介紹這6種位運算子的高階用法。