1. 程式人生 > 實用技巧 >環,模,補碼,負數的表示與減法實現

環,模,補碼,負數的表示與減法實現

  • 假設M是n-bit數的模,比如16是4bit二進位制數的模,8是3bit二進位制數的模,即從000->111,111+1=1000,超過3bit的那個1被捨棄回到000,0到7首位相連就形成一個環, 模的概念與一個環類似,M+B=-M+B=B,相當於一個時鐘(模12)來回撥
  • -1模8是7,-2模8是6,13模8是5,0模8是0,模可以認為是數的規模,一條數字可以這樣無限延伸下去
  • 數軸正半軸是0開頭,負半軸是1開頭
  • 1000定義為-8,這樣可以保證正數個數和負數個數相等同時滿足負數從1開頭的規律
  • M-B又稱為B的補(Complement of B)[B],M-B=-B,故可以用M-B代替-B

在這裡插入圖片描述

  • 2^n-D定義數字D的補碼這種方式計算需要借位,為消除借位定義r-1的補碼
  • D的r-1下的補碼=(r^n-1)-D=(M-1)-D
  • X=r-1,r^n-1=XX…X
  • 2^4-1=1111,有個簡便方法直接1小數點向右移4位為10000,X為二進位制下最大數的符號(Symbol)
  • (r^n-1)-D來計算補碼,相當於XX…X-D,每一位都是最大位,不需要借位
    在這裡插入圖片描述
  • 推出重要規律
    r 的 補 碼 = r n − D = ( r n − 1 ) − D + 1 = ( r − 1 ) 的 補 碼 + 1 r的補碼=r^n-D=(r^n-1)-D+1=(r-1)的補碼+1 r=rnD=(rn1)D+1=(r1)+1
  • 1-1=0,1-0=1,1-D=D’,可以看成按位取反,稱為反碼
    在這裡插入圖片描述
  • 採用補碼運算僅需要加法器和反相器