C語言 數據存儲方式


C語言 數據存儲方式

一、源碼

一個數的原碼(原始的二進制碼)有如下特點:

  • 最高位做為符號位,0表示正,為1表示負

  • 其它數值部分就是數值本身絕對值的二進制數

  • 負數的原碼是在其絕對值的基礎上,最高位變為1

下面數值以1字節的大小描述:

十進制數

原碼

+15

0000 1111

-15

1000 1111

+0

0000 0000

-0

1000 0000

注:原碼表示法簡單易懂,與帶符號數本身轉換方便,只要符號還原即可,但當兩個正數相減或不同符號數相加時,必須比較兩個數哪個絕對值大,才能決定誰減誰,才能確定結果是正還是負,所以原碼不便於加減運算。

二、反碼

對於正數,反碼與原碼相同
對於負數,符號位不變,其它部分取反(1變0,0變1)

十進制數

反碼

+15

0000 1111

-15

1111 0000

+0

0000 0000

-0

1111 1111

注:反碼運算也不方便,通常用來作為求補碼的中間過渡。

三、補碼

1、補碼說明

計算機系統中,數值一律用補碼來存儲。

補碼特點:

  • 對於正數,原碼、反碼、補碼相同

  • 對於負數,其補碼為它的反碼加1

  • 補碼符號位不動,其他位求反,最后整個數加1,得到原碼

十進制數

補碼

+15

0000 1111

-15

1111 0001

+0

0000 0000

-0

0000 0000

2、補碼的意義

在計算機系統中,數值一律用補碼來存儲,主要原因是:

  • 統一了零的編碼

  • 將符號位和其它位統一處理

  • 將減法運算轉變為加法運算

  • 兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄

示例:用8位二進制數分別表示+0和-0

十進制數

原碼

+0

0000 0000

-0

1000 0000

 

十進制數

反碼

+0

0000 0000

-0

1111 1111

說明:不管以原碼方式存儲,還是以反碼方式存儲,0也有兩種表示形式。但是如果以補碼方式存儲,補碼統一了零的編碼:

十進制數

補碼

+0

 0000 0000

-0

10000 0000由於只用8位描述,最高位1丟棄,變為0000 0000

四、案例演示

模擬計算機運算


1)  76 - 32

計算機算法:76+(-32)


2) 76

源碼:0100 1100

反碼:0100 1100

補碼:0100 1100


3) -32

源碼:1010 0000

反碼:1101 1111

補碼:1110 0000


4) 相加

1110 0000

0100 1100


5) 驗算

結果:1 0010 1100

舍棄補碼:0010 1100

結果補碼:0010 1100

反碼:0010 1100

轉換源碼:0010 1100

注:由於舍棄補碼0為正數,則轉換源碼與補碼相同。


6) 結果:44


注意事項:

1、符號位 正數:0

2、符號位 負數:1

3、補碼計算結果,符號位超出大小限制則省略符號位

4、補碼結果:開頭數字是1時、根據負數規則轉為源碼、開頭0是為正數轉換

5、正數:源碼、反碼、補碼、相同

6、負數源碼轉反碼:符號不變,其他位0變為1、1變為0

7、負數反碼轉補碼:反碼的結果之上加1

8、加完或減完結果 不能大於或小於負的127


 


免責聲明!

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



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