補碼相關知識學習

原碼

也叫符號-絕對值碼
最高位0表示正,1表示負,
其餘二進制是該數字的絕對值的二進制位
如十進制的負5二進制的原碼爲1101

原碼的特點:
           原碼簡單易懂
           加減運算複雜
           存在加減乘除四種運算,增加了CPU的複雜度
           零的表示不唯一(1000和0000都可以表示零)

反碼:

 如同原碼運算不方便一樣,反碼和原碼沒有在計算機中應用。

移碼:

移碼錶示數值移動n位,n稱爲移碼量
移碼主要用於浮點數階碼的存儲。

補碼:

十進制轉二進制:

正整數十進制轉二進制:

    除以2取餘數,直至商爲零,餘數倒序排序。

負整數十進制轉換二進制:

    先求與該負整數相對應的正整數的二進制碼,
    然後將所有位取反,末尾加1,
    不夠位數時,左邊補1

 看一個具體例子十進制int 類型十進制-3轉換二進制
 ①首先-3對應的正數是3,求3的二進制碼:

這裏寫圖片描述
實際上int類型的正整數3的二進制表示應該是:
0000 0000 0000 0000 0000 0000 0000 0011
②然後對正數3的原碼按每個位置取反,
(所謂取反就是:
如果當前位置上的數字是0,取反當前位置數字變1
如果當前位置上的數字是1,取反當前位置數字變0)
011取反的結果是:
100
③取反後的結果100末尾再加1就得到了101
④由於int 類型的-3在內存中佔4個字節,1個字節8位,
計算機每個位置上會按0或1存,所以int類型的-3應該
有4*8=32位,所以第③步取反後的結果101只佔了3位
還差32-3=29個位置需要以數字填充,而這29個位置由於
是對負數位不夠的補齊,所以用29個1來填充。
這樣就得到了int類型-3的二進制補碼錶示形式:
11111111111111111111111111111101

我們再來看下這個數字轉換成十六進制是多少,
我們知道二進制轉換16進制,二進制4個位置連到一起按8 4 2 1
的形式計算看是十六進制的一個數。

這裏寫圖片描述

再看下代碼運行的結果:
這裏寫圖片描述

發佈了149 篇原創文章 · 獲贊 53 · 訪問量 66萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章