資料是如何被表示的?整數、浮點數、負數表示

電腦世界中,所有資料最終都是 0 和 1,都可以用二進位表示不同的數字。但是數字可不是只有正整數,還有負數和帶小數的浮點數。今天我們來理解整數、負數和浮點數在電腦裡的表示方式。
一、整數表示(Integer)
整數就是沒有小數部分的數字,例如 0、1、42、1000。
電腦用二進位表示整數,每一個位元(bit)只有 0 或 1。位元的組合形成位元組(byte),通常 8 位元 = 1 byte。
例如用 8 位元表示正整數:
- 十進位 5 → 二進位 00000101
- 十進位 42 → 二進位 00101010
整數表示的範圍取決於位元數:
- 8 位元可以表示 0~255(如果只有正數)
- 16 位元可以表示 0~65535
- 32 位元可以表示 0~4294967295
二、負數表示(Signed Integer)
電腦也需要表示負數,但二進位原本只有 0 和 1。常用的表示方法有三種:
1. 符號位(Sign-magnitude)
- 最左邊的位元代表符號:0 = 正,1 = 負
- 其他位元表示數值
- 例:8 位元,+5 = 00000101,-5 = 10000101
- 優點:直觀易懂
- 缺點:有兩個零(+0 和 -0),加減運算變得複雜
2. 一補數(One’s complement)
- 負數 = 將正數的每個位元取反(1變0,0變1)
- 最高位元代表符號:0 = 正,1 = 負
- 例:+5 = 00000101,-5 = 11111010
- 優點:比符號位更方便一些
- 缺點:仍有兩個零(+0 和 -0),加減運算仍較複雜
3. 二補數(Two’s complement,最常用)
- 負數 = 正數取反(1變0,0變1) + 1
- 例:+5 = 00000101,-5 =(00000101 取反為 11111010 再 + 1)= 11111011
- 最高位元代表符號:0 = 正,1 = 負
- 優點:加減運算可以統一,不需要區分符號位
- 缺點:範圍不對稱(例如 8 位元,範圍是 -128 到 127,因為 0 也要算一位)
二補數是現代電腦標準,因為簡單的運算以及沒有正負零,因此幾乎所有 CPU 都使用二補數表示負數。
三、浮點數表示(Floating Point)
浮點數用來表示帶小數的數字,例如 3.14、-0.001、2.71828。
在解釋浮點數之前,先複習一下科學記號:
- 科學記號將數字表示為
尾數 × 基底^指數,例如: - 也就是以整數乘以 10 的某個次方來表示數字
- 也代表整數可以向左或向右移動小數點的位置
浮點數遵循 IEEE 754 標準,基本概念:
- 將數字表示為:
(-1)^符號 × 尾數 × 2^指數 - 分成三部分:
- 符號位:0 = 正數,1 = 負數
- 指數(Exponent):決定數字向左偏移或向右偏移多少位
- 尾數(Mantissa):有效數字的精確度
- 浮點數大致可以分成單精度與雙精度:
- 單精度(32 位元):1 位元符號 + 8 位元指數(偏移量127) + 23 位元尾數
- 雙精度(64 位元):1 位元符號 + 11 位元指數(偏移量1023) + 52 位元尾數
INFO
偏移量(Bias)是為了讓指數可以表示正負數而設計的。
只要將實際指數加上偏移量,就能用無符號整數表示。
比如
如果沒有使用偏移量,會很難用二進位表示負數,只能使用補數或是其他方法,會增加複雜度。
單精度資料範圍
| 部位 | 位元範圍 |
|---|---|
| 符號位 | 1 位元(1 or 0) |
| 指數 | 8 位元(範圍約 -126 到 +127) |
| 尾數 | 23 位元(約 7 位十進位有效數字) |
雙精度資料範圍
| 部位 | 位元範圍 |
|---|---|
| 符號位 | 1 位元(1 or 0) |
| 指數 | 11 位元(範圍約 -1022 到 +1023) |
| 尾數 | 52 位元(約 15 位十進位有效數字) |
舉例
以下是
| 2的N次方換算十進位 | 對應二進位值 |
|---|---|
| N = -5 => 0.03125 | 00001 |
| N = -4 => 0.0625 | 0001 |
| N = -3 => 0.125 | 001 |
| N = -2 => 0.25 | 01 |
| N = -1 => 0.5 | 1 |
| N = 0 => 1 | 1 |
| N = 1 => 2 | 10 |
| N = 2 => 4 | 100 |
| N = 3 => 8 | 1000 |
| N = 4 => 16 | 10000 |
| N = 5 => 32 | 100000 |
假設十進位數字
- 先將符號位提取出來:
符號位是負數,先記為 ,接下來處理 可以分拆分為 ,轉成二次方表示為 轉成二進位是 可以看作是 ,再轉成科學記號是 - 所以
取指數為 2,根據單精度指數偏移量127,實際存的值是,轉成二進位是 10000001 - 尾數是
1.101的小數部分101,後面補足到 23 位元是10100000000000000000000 - 最後組合起來是:
1 符號 | 10000001 指數 | 10100000000000000000000 尾數(總共32bit)
四、總結
- 整數:固定位元,範圍有限;二補數表示負數最常用
- 浮點數:帶小數,採科學記號表示,範圍大但有精度限制
- 負數:二補數是現代標準,方便統一運算
- 電腦內所有資料,無論整數、浮點數、文字或圖片,最終都可用 0/1 來表示
