Skip to content

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

Poster

電腦世界中,所有資料最終都是 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。

在解釋浮點數之前,先複習一下科學記號:

  • 科學記號將數字表示為 尾數 × 基底^指數,例如:
  • 3.14=3.14100
  • 0.001=1103
  • 2500=2.5103
  • 也就是以整數乘以 10 的某個次方來表示數字
  • 也代表整數可以向左或向右移動小數點的位置

浮點數遵循 IEEE 754 標準,基本概念:

  • 將數字表示為:(-1)^符號 × 尾數 × 2^指數
  • 分成三部分:
    1. 符號位:0 = 正數,1 = 負數
    2. 指數(Exponent):決定數字向左偏移或向右偏移多少位
    3. 尾數(Mantissa):有效數字的精確度
  • 浮點數大致可以分成單精度與雙精度:
    • 單精度(32 位元):1 位元符號 + 8 位元指數(偏移量127) + 23 位元尾數
    • 雙精度(64 位元):1 位元符號 + 11 位元指數(偏移量1023) + 52 位元尾數

INFO

偏移量(Bias)是為了讓指數可以表示正負數而設計的。

只要將實際指數加上偏移量,就能用無符號整數表示。

比如 2+127=129,可以用 8 位元二進位表示為 10000001,只要扣回偏移量 127 就能得到實際指數

如果沒有使用偏移量,會很難用二進位表示負數,只能使用補數或是其他方法,會增加複雜度。

單精度資料範圍

部位位元範圍
符號位1 位元(1 or 0)
指數8 位元(範圍約 -126 到 +127)
尾數23 位元(約 7 位十進位有效數字)

雙精度資料範圍

部位位元範圍
符號位1 位元(1 or 0)
指數11 位元(範圍約 -1022 到 +1023)
尾數52 位元(約 15 位十進位有效數字)

舉例

以下是 2n 次方值對照二進位值的對照表:

2的N次方換算十進位對應二進位值
N = -5 => 0.0312500001
N = -4 => 0.06250001
N = -3 => 0.125001
N = -2 => 0.2501
N = -1 => 0.51
N = 0 => 11
N = 1 => 210
N = 2 => 4100
N = 3 => 81000
N = 4 => 1610000
N = 5 => 32100000

假設十進位數字 6.5 轉成浮點數表示(b10代表以十進位、b2代表以二進位):

  1. 先將符號位提取出來:6.5=16.5(b10) 符號位是負數,先記為 1,接下來處理 6.5(b10)
  2. 6.5可以分拆分為 (4+2+0.5)(b10),轉成二次方表示為 (22+21+21)
  3. (22+21+21) 轉成二進位是 110.1(b2)
  4. 110.1(b2) 可以看作是 110.120(b2),再轉成科學記號是 1.10122(b2)
  5. 所以 22 取指數為 2,根據單精度指數偏移量 127,實際存的值是 2+127=129,轉成二進位是 10000001
  6. 尾數是 1.101 的小數部分 101,後面補足到 23 位元是 10100000000000000000000
  7. 最後組合起來是: 1 符號 | 10000001 指數 | 10100000000000000000000 尾數(總共32bit)

四、總結

  • 整數:固定位元,範圍有限;二補數表示負數最常用
  • 浮點數:帶小數,採科學記號表示,範圍大但有精度限制
  • 負數:二補數是現代標準,方便統一運算
  • 電腦內所有資料,無論整數、浮點數、文字或圖片,最終都可用 0/1 來表示

Wrirten by Aaron Su