位元運算與邏輯運算與電池燈泡的串聯並聯


Posted by cmtilo on 2021-04-19

有關位元運算跟邏輯運算花蠻多時間去理解的(腦子一直轉不過來),我的理解方式是想像成電池跟燈泡,這邊分享給大家參考~以下看圖~


位元運算

and、or、xor是二位元運算,not是一位元運算。
位元運算是把數字轉換成二進位方式進行運算。


& and

可以想像成電池串聯,只要有一顆電池壞掉了(壞掉為0),電路就不會通,燈泡不會亮。
所以電流方向
→ 0電池壞 → 0電池壞 → 0不亮
→ 0電池壞 → 1電池好 → 0不亮
→ 1電池好 → 0電池壞 → 0不亮
→ 1電池好 → 1電池好 → 1亮

運算時:
2 & 5 輸出為 0
先把 2 跟 5 都分別轉換成二進位,再套進上面的遊戲規則,答案就出來了。


| or

可以想像成電池並聯,電流有兩條路可走,就算有一顆電池壞掉了(0),可走另一顆電池(1),所以電路還是有通,燈泡仍然會亮。

運算時:
2 | 5 輸出為 7
先把 2 跟 5 都分別轉換成二進位,再套進上圖遊戲規則,將 111 轉換成十進位結果出來了答案就是 7。


^ xor

(念作exclusive-or)
可以想像成"燈泡"串聯,兩個燈泡都沒有,當然就不會亮;
只有一個燈泡時,沒被另一顆燈泡搶電,所以還是會亮;
兩顆燈泡都有時,互相搶電反而不亮(實際燈光會很弱我們先當作不亮比較好記)。
→ 0無燈泡 → 0無燈泡 → 0不亮
→ 0無燈泡 → 1有燈泡 → 1亮
→ 1有燈泡 → 0無燈泡 → 1亮
→ 1有燈泡 → 1有燈泡 → 0不亮

運算時:
2 ^ 6 輸出為 4
先把 2 跟 6 都分別轉換成二進位,再套進上方遊戲規則,將 100 轉換成十進位答案就是 4。


~ not


運算時:
~15 輸出為 -16

這個現在還想不到怎麼譬喻...?
先記得任一個整數 x,其 ~x 的結果就等於 -x-1 。


邏輯運算

理解上面的之後,其實邏輯運算就更好理解了~


&& AND

要有兩個 true 才 true 。

>true && true
true

> true && false
false

這邊還是可以套用上面電池串聯的聯想,不過這次不用轉換位元了!
運算的時候,兩顆電池都有電(true)才會亮,想像電流方向 左→右 ,所以我們取電流通過的最後一顆電池--右邊電池。
3 && 10 3是x電池,10是y電池,輸出為 10
10 && 3 10是x電池,3是y電池,輸出為 3


|| OR

只要有一個 true 就 true 。

> true || true
true

> true || false
true

延續電池並聯的聯想,不用轉換位元!
運算的時候,一顆電池有電(true)就會亮,所以我們取第一顆電池就可以了。
3 || 10 3是x電池,10是y電池,輸出為 3


! NOT

反過來就對了~唱反調就對了~

> !true
false

> !false
true

這邊一樣想不到圖像化譬喻...苦惱


#位元運算 #邏輯運算 #電池串聯 #電池並聯 #燈泡串聯







Related Posts

Encode 、 Encrypt 以及 Hash

Encode 、 Encrypt 以及 Hash

不可不知的小工具-2023DevOps Day-2

不可不知的小工具-2023DevOps Day-2

將 ChatGPT LineBot 部屬在 Google Scripts 上

將 ChatGPT LineBot 部屬在 Google Scripts 上


Comments