C語言之原碼、反碼和補碼


原碼、反碼和補碼

 1).數據在內存中存儲的時候都是以二進制的形式存儲的.

 

    int num = 10;

 

    原碼、反碼、補碼都是二進制.只不過是二進制的不同的表現形式.

    數據是以補碼的二進制存儲的.

 

 2). 1個int類型的變量.在內存中占據4個字節, 32位.

 

    00000000 00000000 00000000 00000000

 

    在不考慮正負的情況下.1個int類型的變量可以表示接近43e種數據.

 

    為了可以表示正負性.使用最高為來表示這個數的正負性.

    如果最高為是0 那么表示這個數是1個正數

    如果最高為是1 那么表示這個數是1個負數.

    所以,來表示數據的只有31位. 所以,1個int類型的變量.

    最小值是: -2147483648  最大值是:2147483647

 

 

 3). 原碼

    最高位表示符號位. 剩下的位數.是這個數的絕對值的二進制.

 

    10的原碼.

    00000000 00000000 00000000 00001010

 

    -8的原碼.

    10000000 00000000 00000000 00001000

 

    絕對值: 正數的絕對值是自己,負數的絕對值去掉負號.

 

    -20.

    10000000 00000000 00000000 00010100

 

 

 4). 反碼

    正數的反碼就是其原碼.

    負數的反碼就是在其原碼的基礎之上 符號位不變,其他位取反.

 

    10的反碼:

   

    10的原碼:00000000 00000000 00000000 00001010

    10的反碼:00000000 00000000 00000000 00001010

 

    -8

    -8的原碼:10000000 00000000 00000000 00001000

    -8的反碼:11111111 11111111 11111111 11110111

 

 

 5). 補碼

    正數的補碼就是其原碼.

    負數的補碼就是在其反碼的基礎之上+1

 

    10.

    10的原碼:00000000 00000000 00000000 00001010

    10的反碼:00000000 00000000 00000000 00001010

    10的補碼:00000000 00000000 00000000 00001010

 

    -8

    -8的原碼:10000000 00000000 00000000 00001000

    -8的反碼:11111111 11111111 11111111 11110111

    -8的補碼:11111111 11111111 11111111 11111000

 

 

 

 6). 任何數據都是以其二進制的補碼形式存儲在內存中的.

 

    int num = -8;

 

 

 7). 為什么數據要以補碼的形式存儲呢?

   

    計算機中只有加法沒有減法.為了更加低成本的計算出結果,所以使用補碼來存儲數據.

 

    3 + 2;

    3 - 2; 這個減法運算對於計算機而言它的理解是 3 + (-2); 1

 

    使用原碼計算.

    3的原碼    00000000 00000000 00000000 00000011

    -2的原碼   10000000 00000000 00000000 00000010

                ----------------------------------------------------

                   10000000 00000000 00000000 00000101 結果是1個負數明顯是不對的

 

 

    使用反碼計算.

    3 的反碼:  00000000 00000000 00000000 00000011

    -2的反碼:  11111111 11111111 11111111 11111101

                   --------------------------------------------------

                   00000000 00000000 00000000 00000000        0

 

    使用補碼計算

    3 的補碼:   00000000 00000000 00000000 00000011

    -2的補碼:   11111111 11111111 11111111 11111110

                   -------------------------------------------------

                    00000000 00000000 00000000  00000001       1

 

    注:使用補碼來做運算效率是最高的.


免責聲明!

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



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