• 沒有找到結果。

位元運算

N/A
N/A
Protected

Academic year: 2022

Share "位元運算"

Copied!
23
0
0

加載中.... (立即查看全文)

全文

(1)

位元運算

by music960633

(2)

課程內容 課程內容

• 1. 位元運算子

• 2. 位元運算應用

(3)

課程內容 課程內容

• 1. 位元運算子

• 2. 位元運算應用

(4)

位元運算子 位元運算子

• 常見的整數運算

• + - * / % ...

• 以 int 為例,將 32 個位元視為一個數字做運算

• 0001101111010010(2) = 0x1bd2(16) = 7122(10)

• 位元運算

• & | ^ ~ << >>

• 將每個位元視為獨立,個別運算

(5)

位元運算子 位元運算子

• 以下將一一介紹以下位元運算子

• & : AND

• | : OR

• ^ : XOR

• ~ : NOT

• << : left shift

• >> : right shift

(6)

位元運算子 – &

位元運算子 – &

• & : AND

• ex: 1010 & 0110 = 0010

& 0 1

0 0 0

1 0 1

(7)

位元運算子 – | 位元運算子 – |

• | : OR

• ex: 1010 | 0110 = 1110

| 0 1

0 0 1

1 1 1

(8)

位元運算子 – ^ 位元運算子 – ^

• ^ : XOR

• ex: 1010 ^ 0110 = 1100

^ 0 1

0 0 1

1 1 0

(9)

位元運算子 – ~ 位元運算子 – ~

• ~ : NOT

• ex: ~1010 = 0101

~ 0 1

1 0

(10)

位元運算子 – <<

位元運算子 – <<

• << : left shift

• 所有位元往左 (MSB) 移動 k 格,超出範圍直接無視,並在最右 端 (LSB) 補上 k 個 0

• ex: 1011 << 2 = 1100

(11)

位元運算子 – >>

位元運算子 – >>

• << : right shift

• 所有位元往右 (LSB) 移動 k 格,超出範圍直接無視,並在最左 端 (MSB) 補上 k 個 0

• ex: 1011 >> 2 = 0010

(12)

課程內容 課程內容

• 1. 位元運算子

• 2. 位元運算應用

(13)

位元運算應用 位元運算應用

• 乘除 2n

• 表示集合

• 枚舉

• 黑魔法

(14)

位元運算應用 – 乘除 2

n

位元運算應用 – 乘除 2

n

• 左移右移可視為乘 / 除 2 的冪次

• a << n = a * 2n ( 不考慮 overflow)

• a >> n = a / 2n ( 無條件捨去 )

(15)

位元運算應用 – 表示集合 位元運算應用 – 表示集合

• 將一個 unsigned 視為有 32 個元素的集合

• 00110101 = {0,2,4,5}

• 位元運算視為集合運算

• &: 交集 (intersection)

• |: 聯集 (union)

• ^: 對稱差 (symmetric difference)

• ~: 補集 (complement)

• ex: {0,2,4,5} ∩ {2,3,5,7} = {2,5}

• 00110101 & 10101100 = 00100100

(16)

位元運算應用 – 表示集合 位元運算應用 – 表示集合

• 空集合: 0

• 宇集合: (1<<n)-1 = 111...111

• 集合 S 加入第 k 個元素

• S = S | (1<<k)

• 集合 S 刪除第 k 個元素

• S = S & ~(1<<k)

• 集合內是否有第 k 個元素

• S & (1<<k) != 0

• (S>>k) & 1 != 0

(17)

位元運算應用 – 枚舉 位元運算應用 – 枚舉

• 題目:枚舉 N 個物品要取不取的所有可能

• Input

• N=3

• Output

• 000 001 010 011 100 101 110 111

(18)

位元運算應用 – 枚舉 位元運算應用 – 枚舉

• 題目:枚舉 N 個物品要取不取的所有可能

• 簡單,使用 DFS !

(19)

位元運算應用 – 枚舉 位元運算應用 – 枚舉

• 題目:枚舉 N 個物品要取不取的所有可能

• 將每個位置取或不取視為 0/1 ,則所有可能形成的二進位數字恰 好是 0 到 2n-1 !

• 令一個變數 s 由 0 跑到 2n-1 ,再將 s 的二進位輸出即可

(20)

位元運算應用 – 黑魔法 位元運算應用 – 黑魔法

• Three value logic

• True(T)/False(F)/Unknown(X)

• How to implement?

& T F X

T T F X

F F F F

X X F X

(21)

位元運算應用 – 黑魔法 位元運算應用 – 黑魔法

• True = 0, False = 1, Unknown = 2

• 一堆 if 覺得不是很簡潔

(22)

位元運算應用 – 黑魔法 位元運算應用 – 黑魔法

• True = 0, False = 1, Unknown = 2

• 多使用了 9*4 byte 的記憶體

(23)

位元運算應用 – 黑魔法 位元運算應用 – 黑魔法

• True = 0, False = 1, Unknown = 2

• In MiniSat

• What the hell is this!!

參考文獻

相關文件

各國的課程綱要均強調運算的概念性了解。我國 2009 年課程綱要談到所謂

The Seed project, REEL to REAL (R2R): Learning English and Developing 21st Century Skills through Film-making in Key Stage 2, aims to explore ways to use film-making as a means

[r]

將一條長 56cm 的綠色緞帶和一條長 42cm 的紅色緞帶剪成一樣長 的小段,且沒有剩下,則每小段緞帶最長是幾 cm?.

[r]

[r]

We point out that extending the concepts of r-convex and quasi-convex functions to the setting associated with second-order cone, which be- longs to symmetric cones, is not easy

(A)受器 感覺神經元 聯絡神經元 運動神經元 動器 (B)動器 運動神經元 聯絡神經元 感覺神經元 受器 (C)動器 感覺神經元 聯絡神經元 運動神經元 受器 (D)受器 運動神經元