天天看點

計算機資料存儲——補碼原碼反碼詳解

1;引入問題

為什麼計算機要采用補碼來存儲資料 ,而不是源碼反碼呢?

先介紹源碼 反碼 與補碼的概念以及之間的關系

在這裡就拿有符号的8位作為解釋。。。。注意8位表示的整數範圍是-128至127——這個等下再解釋為什麼是這樣的

源碼 就是 由符号位跟數值直接構造的

在源碼的表示法中:正數和負數在編碼表示上 隻有符号位不同 數值部分完全相同

+5 0000 0101

-5 1000 0101

+0 0000 0000

-0 1000 0000

優點:與真值關系直覺友善 轉換簡單 實作乘除簡單 ->轉化成左右移動邏輯運算 左移n位表示乘以2的n次方

缺點 0的表示不唯一 執行加減法複雜需要先進行判斷

現代計算機中不用原碼來表示整數 隻用定點原碼小數表示浮點數尾數部分

若計算機使用原碼存儲 在計算的時候不進行判斷則會出現問題

+1 0000 0001

-1 1000 0001

+1 + -1 = (0000 0001 + 1000 0001) = 1000 0010 = -2 則符号錯誤 當不同号時要先判斷絕對值的大小确定結果正負

反碼 :正數的反碼是它本身 而負數的反碼就是他的數值位 取反

反碼在計算機中使用很少 一般都是作為數位轉化的中間表示形式

補碼 :補碼就可以實作加減法的運算統一

正數的補碼就是他本身

而負數的補碼是他數值位取反加一也可以說成等于模與該負數絕對值的差

介紹一下模,也就是餘數

例如時鐘 我正向撥動4下是不是等同于反向撥動8下

在計算機中也是如此

0000——1111——(1)0000—舍棄最高位又是一波循環了這就是補碼的理念 實作加減法統一也就是這樣的

減去這麼多和加上那麼多是一個性質

-5 1000 0101

補碼 1111 1011

相加) 是不是10000000

你再可以例出幾個

-1+2 = 【1111 1111】補 + 【0000 0010】= 【10000 0001】 = 0000 0001 為1;

最後說一下補碼的優點

補碼的0是唯一的 是以多出了以為1000 0000 負數 表示128 這也就是為什麼8位表示的範圍是-128到127

最後簡述一下整數和小數的轉化

計算機資料存儲——補碼原碼反碼詳解

繼續閱讀