2023-05-09
置頂文章
[Computer-Concept] How to express negative number in computer
- 怎麼儲存負數 ??
- 已知用4個bit表示 +6: 0110
- 每個 bit 表示 1 or 0, 所以 4 bit 就可以表示 16 個數字 (0~15)
- but … 怎麼表達負數 ?
- Method 1: Singed integers
- 直觀的想法: 多用一個 bit 來表示[正]數或是[負]數
- 用法: + 用 0 表示, - 用 1 表示
- ex: +4 表示成: 0100 | -4 表示成: 1100 最前面一個bit表示正數或是負數
- 缺點:
- 0 會有兩種表示法: 1000 和 0000
- 加法不能用
- ex: 想要做到 5 - 5 = 0
- 5: 0101 -5: 1101 兩個相加是 10010 明顯不是預期中的答案
- Method 2: 2的補數
- 為了改善第一個方法的缺點, 於是有了 2 的補數的想法出現
- 補數: 將負數轉成其正數的補數
- 4(十進位) 的補數是: 6 23(十進位) 的補數是: 77 …
- 11001011(二進位) 的補數是: 100000000 - 11001011 = 110101
- 上面例子通常會這樣想: 將 bit 做 not 運算後 + 1: !(11001011)+1 = 00110100+1=110101
- 二進位補數適合表示 -N
- 另外可以做加法運算
- 5 + (-5) = 0101 + (1011) = 10000 超過 4 bit 所以可得 0000