# [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)