原碼、反碼和補碼


    數在計算機中是以二進制形式表示的,數分為有符號數和無符號數,原碼、反碼和補碼都是有符號定點數的表示方法。

    其中,原碼就是這個數本身的二進制形式,數的最高位為符號位,0表示正號,1表示負號,例如00000001就是+1,10000001就是-1。另外,正數的反碼和補碼都和原碼相同。而負數的反碼就是將其原碼除符號位之外的各位求反,例如10000011的反碼為11111100;負數的補碼是將其原碼除符號位之外的各位求反(即該負數的反碼)之后,再在末位加1,例如10000011的補碼為11111101。

    一個數的原碼和它的補碼是可逆的,即補碼的補碼為原碼。

    另外,00000000和10000000都表示數字0,原碼表示不同,但補碼一樣,為00000000。其中,10000000的反碼為11111111,末位加1,因為進位,最高位溢出,故符號位變成0,補碼為00000000。

    例如:1011的原碼、反碼和補碼分別為01011、01011、01011;-1011的原碼、反碼和補碼分別為11011、10100、10101;0.1101的原碼、反碼和補碼分別為0.1101、0.1101、0.1101;-0.1101的原碼、反碼和補碼分別為1.1101、1.0010、1.0011。

    八位二進制原碼的表示范圍為-127~127,因為2的8次方為256,故-127~-0和+0~127之間共有256個數。同理,八位二進制反碼的表示范圍也是-127~127。而八位二進制補碼中,由於-0和+0的補碼相同,故用-128代替了-0,所以表示范圍為-128~127。

package text;
public class erjinzhi {
    public static void main(String [] args) {
        int a=(-2)&(-5);
        if(a==0) 
        System.out.println("二進制以原碼的形式存儲");
        else if(a==-8)
        System.out.println("二進制以反碼的形式存儲");
        else if(a==-6)
        System.out.println("二進制以補碼的形式存儲");
    }
}

      設計補碼的目的是:使符號位能與有效值部分一起參與計算,從而簡化運算規則;使減法運算轉化為加法運算,進一步簡化計算器的線路設計。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM