1. 程式人生 > >原碼、反碼和補碼(C語言 計算機原理)

原碼、反碼和補碼(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

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

我從這兒轉來的:https://www.cnblogs.com/jialiangliang/p/6044700.html