[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