原碼、反碼、補碼的轉換與運算

原碼、反碼、補碼的轉換與運算

正數的原碼、反碼、補碼都相等。

  • 6[原] = 6[反] = 6[補] = 0110

負數的反碼是原碼符號位不變其餘位取反。(機器數最高位爲符號位,0表示正數,1表示負數)

  • -6……= 1 0110
  • -6[反]  = 1 1001

負數的補碼 = 反碼+1

  • -6[補] 
  • -6[反] + 1 = 1001 + 1 
  • -6[補] =……1010

補碼的補碼爲原碼。(或者:負數的補碼轉化爲原碼,除符號位外“減1取反”)

  • -6[補]
  • = 1 1010
  • 1 0101 + 1(-6[補][反] + 1)
  • = 1 0110 
  • = -6……(原碼)

 

移位操作:(符號位不參與移位,負數轉換成補碼後再運算)

  • 6 << 1 = 12
  • 6 >> 1 = 3
  • -6 << 1 = -12
  • -6 >> 1 = -3

-6 << 1 = 

  • -6[原] =0110
  • -6[補] = 1001 + 1 = 1010
  • 左移一位:0100
  • 取其補碼,可得原碼:1011 + 1
  • 1100
  • = -12

 按位異或和或操作:(負數轉換爲補碼再計算)

  • 5^3 = 6
  • -5^3 = -8
  • -5^-3 = 6
  • -5|-3 = -1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章