數字系統

電腦內部資料是以0和1來儲存的,這種只有0和1兩種狀態的系統,成為二進位系統;本文將就二進位系統探討其轉換、四則及邏輯運算。

進制

十進位制(Decimal)

十進位制是一種滿10進位,基底為十的數字系統,由0、1、2、3、4、5、6、7、8、9等十個數字組成,為日常生活中普遍使用的數制。例127810,其基底通常被省略,亦即1278。

二進位制(Binary)

二進位制是一種滿2進位,基底為二的數字系統,由0和1兩個數字所組成,為電腦最基本的數字系統。通常表示時會在數字前加一"B"以便於識別,例B1101或1102

八進位制(Octal)

八進位制為逢8進位的數字系統,由0,1,2,3,4,5,6,7所組成,通常於數字前加"&"或"&O"字母符號識別,例如&O467或4568。。

十六進位制(Hexadecimal)

十六進位制為逢16進位的數字系統,由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F所組成,其中A表十進位的10,B表 11,依次類推,其識別方式是於數前加&H,例如&H123C或123C16

數字系統的轉換

非十進位轉成十進位

將整數與小數部分分開處理

  • 整數是以n進位數值,乘上相對的n正次方值
  • 小數是以n進位數值,乘上相對的n負次方值

例如:
1012=1 x 20 + 0 x 21 + 1 x 22 = 510
0.112=1 x 2-1 + 0 x 2-2 = 0.7510

十進位數轉換成非十進位

使用短除法,從底下往上依序取餘數

x進位數轉換成y進位數

先將x進位數換成十進位數,再轉換成y進位數

隨堂練習

請問D02A16+548710等於多少?
(1) 1100 0101 1001 10012
(2) 1626318
(3) 5878716
(4) F59916

Tips: 將所有數字都換成十進位

Ans: (2)

補數系統

補數(Complement)是指兩數字加起來等於某數時,則二數互為某數的補數。
例如3的10補數為7,7的10補數為3。

在電腦基礎運作的二進制運算中,為了達成減法、除法運算,運用了補數。

減法就是加上某數的補數,而除法就是連續加上加上某數的補數。

一補數(1's complement)

在一補數系統中,-3的表示方法是

  1. 首先先將 3 以二進位表示:0011
  2. 先算出一補數,把每個 1 寫成 0、每個 0 寫成 1,得到 1100

使用一補數進行減法運算

運算方法:

  1. 被減數轉成一的補數
  2. 兩數相加,若有溢位,將該位元加回最小位數(LSD: Least Significant Digit)即得到正確結果

例如:4 - 3 = 01002 + 11002 = (1)00002 = 00012 = 1

然而,在一補數系統中,0 居然可以被同時表示成正零(+0)和負零(−0),這造成了一些系統問題。

於是就發明了2的補數系統來解決。

二補數(2's complement)

在二補數系統中,負整數表示方法是:

  1. 首先以二進位表示
  2. 被減數一補數表示,把每個 1 寫成 0、每個 0 寫成 1,得到 1100
  3. 將最小位數再加上一個1

二補數常用來表示有號數,第一個位元用來記錄正負號

  • 正號表示成 0
  • 負號表示成 1

正數和0的二補數就是該數字本身;負數的二補數則是將其對應正數按位元取反再加1。

使用二補數進行減法運算

運算方法:

  1. 被減數轉成二的補數
  2. 兩數相加,若有溢位,捨棄最高位元,即可得到答案

例如 4 - 3 = 01002 + 11012 = (1)00012 = 00012 = 1

進階閱讀

https://hackmd.io/@sysprog/binary-representation

tags: 電腦科學概論