---
# System prepended metadata

title: '[CS101] 初心者的計概與 coding 火球術 3-1、3-2、3-3'

---

# [CS101] 初心者的計概與 coding 火球術 3-1、3-2、3-3
## 3-1 二進制
二進制練習：27, 32, 100

27 = 16 + 8 + 2 + 1 = 1 1 0 1 1 
=> 32 - 4 - 1 = 1 1 1 1 1 + 1 - 1 - 1 0 0

100 = 128 - 28 = 1 0 0 0 0 0 0 0 - 32 + 4
=> 1 0 0 0 0 0 0 - 1 0 0 0 0 + 1 0 0
=> 1 2 0 0 0 0 - 1 0 0 0 0 + 1 0 0
=> 1 1 0 1 0 0

## 3-2
bit: 1 or 0

1byte = 8bits

KB, MB, GB, TB

## 3-3 負數、浮點數的儲存
通常數字會用 32bit(4bytes) 來儲存

### 負數
負數儲存的基本概念是，第一個 bit 表示正負號，正數加上負數為 0。

把正數變為負數的其中一個方法是
假設 p = 正數, n = 正數通通顛倒
這樣 p + n = 1 1 1 ... 1 1 1
這時 p + n + 1 = (1) 0 ... 0
(1)超出了記憶體會被丟掉，也就是結果為 0
那 n + 1 就是 p 的負數，也就是反轉後加一

一個 32bit 儲存空間的負數能表示 -2^31~2^31 - 1
會有 - 1，是因為 1 0 ... 0 翻轉加一，仍然是 1 0 ... 0

若超出了表示範圍，就會溢位(overflow)，表示出非預期的數值

### 浮點數
(s)m * b^e

m 規定永遠小於 0 時，稱 m 為正規化的
有時候會用 s 表示正負號

通常 b = 2

由於浮點數不能表達所有實數，浮點運算與相應的數學運算有所差異，有時此差異極為顯著。
比如：
[二進位浮點數不能表達0.1和0.01，而且 0.1^2 != 0.01](https://zh.wikipedia.org/zh-tw/%E6%B5%AE%E7%82%B9%E6%95%B0)

一般分成單精度(32bit)和雙精度(64bit)，但也有更大的儲存單位


參考資料: [維基百科 浮點數](https://zh.wikipedia.org/zh-tw/%E6%B5%AE%E7%82%B9%E6%95%B0)