A1 數據表示
數據單位
- 位元(bit/b)
- 數值:數據的基本單位。它可以是 0 或 1。
- 字節/位元組(B)
- 數值:1 B = 8 bits
- 千字節(KB)
- 數值:1 KB = 2¹⁰ B = 1024 B = 2¹⁰ B
- 百萬字節(MB)
- 數值:1 MB = 2¹⁰ KB = 1024 KB = 2²⁰ B
- 十億字節(GB)
- 數值:1 GB = 2¹⁰ MB = 1024 MB = 2³⁰ B
- 萬億字節(TB)
- 數值:1 TB = 2¹⁰ GB = 1024 GB = 2⁴⁰ B
位元速率單位列表
- 每秒位元(bps, bit/s, b/s)
- 數值:每秒鐘傳輸 1 位元的數據。
- 每秒千位元(kbps, kbit/s, kb/s)
- 數值:1 kbps = 10³ bps = 1000 bps = 10³ bps
- 每秒百萬位元(Mbps, Mbit/s, Mb/s)
- 數值:1 Mbps = 10³ kbps = 1000 kbps = 10⁶ bps
- 每秒十億位元(Gbps, Gbit/s, Gb/s)
- 數值:1 Gbps = 10³ Mbps = 1000 Mbps = 10⁹ bps
- 每秒萬億位元(Tbps, Tbit/s, Tb/s)
- 數值:1 Tbps = 10³ Gbps = 1000 Gbps = 10¹² bps
無符號整數
無符號整數僅用來表示非負整數(即 0 和正整數)。
- 特點: 所有位元(bits)都用來儲存數值,沒有正負號之分。
- 數值範圍: 若有 個位元:
- 最小:
- 最大:
- 範例(以 8 位元為例):
0000 0000= 01111 1111=
有符號整數
有符號整數可以用來表示正數、負數與 0。
在電腦科學中,最常見的表示方法是將最高有效位元 作為「符號位元」:
0:代表正數
1:代表負數
數值範圍: 若有 個位元:
- 最小:
- 最大:
- 原因:最高位元(MSB)被拿來當作符號位,所以只剩下 個位元來表示數值。
範例(以 8 位元為例):
0111 1111= (正數最大值)0000 0001= 10000 0000= 01111 1111= -1 (這在無符號中是 255)1000 0001= -1271000 0000= (負數最小值)
二補碼
二補碼是為了解決「負零」問題並簡化硬體加減法運算而設計的。
如何計算二補碼?
從正數轉負數(或負數轉正數):
- 取反:將所有位元 0 變 1,1 變 0。
- 加 1:在結果上加 1。
範例:求 -5 的 4位元二補碼
- 正 5 的二進位:
0101 - 反轉位元:
1010 - 加 1:
1010 + 1 = 1011 - 因此,
-5在 4位元二補碼系統中表示為1011。
二補碼的優點
- 零的表示唯一: 只有
0000 0000代表 0,不存在-0。 - 簡化電路: 減法運算可以看作是「加法運算」。
- 例如:
5 - 3等於5 + (-3)。 - 電腦只需要設計「加法器」,不需要額外設計減法器。
- 例如:
快速比較表 (以 8 位元為例)
| 類型 | 位元數 (n) | 最小值 | 最大值 | 備註 |
|---|---|---|---|---|
| 無符號 (Unsigned) | 8 | 0 | 255 | 全用於數值 |
| 二補碼 (Signed) | 8 | -128 | 127 | 最高位為符號位 |
常見考點:
- 溢位:當運算結果超出了該位元數能表達的範圍(例如兩個正數相加結果變成負數)。
- 擴充:當要把 8 位元的數變成 16 位元時,正數前面補 0,負數前面補 1,以保持數值不變。
溢出錯誤
1. 甚麼是溢出(Overflow)?
- 溢出指在有符號數(signed integer)的算術運算(如加、減)中,運算結果超出該二進制位數所能表示的範圍。
- 例如:8-bit 有符號整數範圍為 -128(10000000)至 +127(01111111)。若結果小於 -128 或大於 +127,便發生溢出。
2. 溢出發生的條件(以加法為例)
- 兩個正數相加,結果變為負數(符號位元由 0 變 1)。
- 兩個負數相加,結果變為正數(符號位元由 1 變 0)。
- 正數加負數(或負數加正數)不會產生溢出,因為結果的絕對值一定小於或等於其中一個運算元的絕對值。
3. 如何檢測溢出?
- 方法:檢查進位(Carry)與符號位元進位(Carry into MSB)是否相同。
- 若兩者相同 → 無溢出。
- 若兩者不同 → 溢出。
- 另一種看法:僅看最高有效位元(MSB)的進位輸入和輸出是否一致。
- 輸入 = 輸出 → 無溢出;輸入 ≠ 輸出 → 有溢出。
例子(8-bit 有符號整數)
- 例 1:正數相加導致溢出
01000000 (+64) + 01000001 (+65) = 10000001 (-127 in signed,但正確應為 +129)
MSB 進位輸入為 0,輸出為 1 → 不同,溢出。 - 例 2:負數相加導致溢出
11000000 (-64) + 11000001 (-63) = 10000001 (-127,但正確應為 -127)?注意:(-64)+(-63)=-127,沒有溢出?
正確例子:10000000 (-128) + 10000001 (-127) = 1 00000001 (忽略進位後 00000001=+1,正確應為 -255)
﹡MSB 進位輸入為 1,輸出為 0 → 不同,溢出。 - 例 3:無溢出情況
00110011 (+51) + 00001111 (+15) = 01000010 (+66)
﹡MSB 進位輸入 = 0,輸出 = 0 → 相同,無溢出。
條碼 vs 二維碼
掃描容易度
- 條碼: 現代科技使安裝了特定應用程式的智能手機既可掃描條碼,也可掃描二維碼。條碼大多只能從兩個角度進行掃描,即 0° 或 180°。
- 二維碼: 二維碼是可以從任何方向掃描的。即使掃描器傾側,令掃描出來的圖像扭曲,它仍有機會成功讀取二維碼的數據。
糾正錯誤的能力
- 條碼: 如果單個條形或空格的寬度被更改,便無法正確掃描條碼。
- 二維碼: 二維碼比條碼具有更高的糾正能力。它通常可以恢復高達 30% 的數據。
可代表的數據種類
- 條碼: 一些條碼可以表示 ASCII 字符,但另一些只可表示數字。
- 二維碼: 二維碼可以表示統一碼(Unicode)字符。
可代表的數據量
- 條碼: 序列的最大長度約為 50 個字符。
- 二維碼: 二維碼的上限通常不少於 1000 個字符。
Last updated on