(轉)C語言之原碼、反碼和補碼

來源:互聯網
上載者:User

標籤:class   進位   使用   類型   沒有   nbsp   不同的   結果   計算   

原碼、反碼和補碼

 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

 

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

(轉)C語言之原碼、反碼和補碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.