原碼、補碼和反碼之間的轉換

在開始之前首先明確3個概念:

        1、正數的原碼、補碼和反碼都是一樣的。

        2、計算機中是用補碼來表示數字的二進制的。

        3、二進制的最高位(第一位)是符號位,0表示正數,1表示負數。

下面以一些簡單的例子來介紹原碼、反碼和補碼。採用8位二進制來進行說明即:0000 0000;

原碼

        [12]原 = 0000 1100,

        [-12]原 = 1000 1100,負數的原碼就是正數的原碼改變符號位。

反碼

       反碼是原碼符號位不變,其餘數值位按位取反。

        [-12]反 = 1111 0011。

補碼

        補碼是在反碼最低位加1。(實際上補碼和反碼在定義上並沒有直接的關係,只是恰好補碼等於反碼最低位加1)。

        [-12]補 = 1111 0100。

轉換

    反碼轉原碼(符號位不變,數值位取反)

         [X]反 = 1111 0011 -> [X]原 = 1000 1100

    補碼轉原碼

        [X]補 = 1111 0010,根據原碼轉補碼倒推,我們應該先補碼-1得到[X]反=1111 0001,然後對反碼取反得到[X]原=1000 1110=-14。但是如果減1在取反的話,存在借位的情況,這樣算起來有時候容易出錯。所以還要另外一種算法:先對補碼的數值位取反,然後加1即可得到原碼。(即補碼的補碼是原碼

        [X]補 = 1111 0100 -> 1000 1011 -> 1000 1100。

    補碼求相反數的補碼

        已知[X]補=0000 1100,求[-X]補。

        按照老老實實的方法來算[X]原=[X]補=0000 1100,則[-X]原=1000 1100,[-X]補=1111 0100。當X爲負數時,我們要先求其原碼,在得到起絕對值的原碼,正數補碼原碼一直,不用在計算。

        有一種簡單的算法是對[X]補的符號位和數值位都取反再加1,即:

        [X]補 = 0000 1100 -> 1111 0011 -> 1111 0100。

關於我上面說的補碼和反碼無直接關係的原因可以參考原碼,反碼,補碼的深入理解與原理原碼、反碼、補碼知識詳細講解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章