←第 2 章・二進位與十六進位數系 全部課程
第 2 章 第 2 週

二進位與十六進位數系

Binary and Hexadecimal

這章是後面所有東西的字母表。負數怎麼存、為什麼會溢位、為什麼 int 最大是 2147483647——全部從這裡來。

課本小節
  • 二進位
  • 十六進位
  • 2 的補數
  • 溢位
概念 01

為什麼是二進位

Why Binary
白話講

電路裡只有兩種可靠的狀態:有電壓(1)和沒電壓(0)。

為什麼不用十進位?因為你要分辨 10 種不同的電壓,噪訊稍微一干擾就認錯。只分兩種最不會出錯——這就像用「開燈/關燈」傳訊息,比用「燈的亮度」可靠得多。

十六進位只是為了讓人類看得舒服:4 個 bit 剛好寫成 1 個 hex 字元,1011 0110 寫成 0xB6 就短很多。電腦不認識 hex,那是給人看的。

1 byte = 8 bits = 2 個 hex 字元  n bits 能表示 2n 種東西
在說什麼LC-3 是 16 位元:一個字 16 bits = 4 個 hex 字元,位址空間 2^16 = 65536 個位置。
概念 02

2 的補數:負數怎麼存

Two's Complement
白話講

問題:只有 0 和 1,負號要放哪?

最笨的方法是拿最高位當正負號,但這樣會有「+0 和 −0」兩個零,而且加法器要判斷正負,很麻煩。

2 的補數的聰明之處:把負數設計成「加上去剛好會進位歸零」的那個數。這樣減法就是加法,硬體只要一個加法器就夠了。

像時鐘:往回撥 3 小時,等於往前撥 9 小時(12 小時制)。9 就是 3 的「補數」。

求 −x:把每個 bit 反過來,然後 +1
n 位元的範圍:−2n−1 ~ +2n−1 − 1
在說什麼16 位元的範圍是 −32768 ~ +32767。負的那邊多一個,因為 0 佔了正的位置。

溢位 (overflow) 怎麼判斷:兩個同號的數相加,結果卻變成異號,就是溢位。
正 + 正 = 負 → 溢位。負 + 負 = 正 → 溢位。正 + 負永遠不會溢位(結果一定在範圍內)。這是考題最愛的判斷。

白話講堂・由 Atlas 產生。內容依據課程教材與官方教學大綱整理,不是老師的官方講義,請以課堂公告為準。