---
title: 數字系統
image:
description:
---
# 數字系統
:::info
電腦內部資料是以0和1來儲存的,這種只有0和1兩種狀態的系統,成為二進位系統;本文將就二進位系統探討其轉換、四則及邏輯運算。
:::
## 進制
### 十進位制(Decimal)
十進位制是一種滿10進位,基底為十的數字系統,由0、1、2、3、4、5、6、7、8、9等十個數字組成,為日常生活中普遍使用的數制。例127810,其基底通常被省略,亦即1278。
### 二進位制(Binary)
二進位制是一種滿2進位,基底為二的數字系統,由0和1兩個數字所組成,為電腦最基本的數字系統。通常表示時會在數字前加一"B"以便於識別,例`B1101`或110~2~。
### 八進位制(Octal)
八進位制為逢8進位的數字系統,由0,1,2,3,4,5,6,7所組成,通常於數字前加"&"或"&O"字母符號識別,例如`&O467`或456~8~。。
### 十六進位制(Hexadecimal)
十六進位制為逢16進位的數字系統,由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F所組成,其中A表十進位的10,B表 11,依次類推,其識別方式是於數前加`&H`,例如`&H123C`或123C~16~。
## 數字系統的轉換
### 非十進位轉成十進位
將整數與小數部分分開處理
- 整數是以n進位數值,乘上相對的n正次方值
- 小數是以n進位數值,乘上相對的n負次方值
例如:
101~2~=1 x 2^0^ + 0 x 2^1^ + 1 x 2^2^ = 5~10~
0.11~2~=1 x 2^-1^ + 0 x 2^-2^ = 0.75~10~
### 十進位數轉換成非十進位
使用短除法,從底下往上依序取餘數
### x進位數轉換成y進位數
先將x進位數換成**十進位數**,再轉換成y進位數
### 隨堂練習
請問D02A~16~+5487~10~等於多少?
(1) 1100 0101 1001 1001~2~
(2) 162631~8~
(3) 58787~16~
(4) F599~16~
> Tips: 將所有數字都換成十進位
Ans: (2)
## <a id="complement"> 補數系統</a>
`補數(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 = 0100~2~ + 1100~2~ = (1)0000~2~ = 0001~2~ = 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 = 0100~2~ + 1101~2~ = (1)0001~2~ = 0001~2~ = 1
## 進階閱讀
https://hackmd.io/@sysprog/binary-representation
###### tags: `電腦科學概論`