1. 程式人生 > >整型與浮點型資料在計算機記憶體中的儲存

整型與浮點型資料在計算機記憶體中的儲存

1、型別的歸類

    整型家族:char、unsigned char、signed char      //對於char來說,標準裡並不預設其為有符號還是無符號的,這個結果取決於編譯器

                        short ( signed short [int] )、unsigned short [int]

                        int ( signed int )、unsigned int

                        long ( signed long [int] )、unsigned long [int]

    浮點數家族:float

                            double

    構造型別:陣列型別

                        結構體型別 struct

                        列舉型別 enum

                        聯合型別 union

    指標型別

    空型別

2、整型在記憶體中的儲存

    1)整型在記憶體中以補碼的形式儲存。

    原因有三:其一,使用補碼可以將符號位和數值域統一處理;其二,加法和減法可以統一處理(cpu只有加法器);其三,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

    2)資料儲存的大小端模式

    小端位元組序儲存:資料的低位元組存到低地址處,高位元組存到高地址處。

    大端位元組序儲存:資料的低位元組存到高地址處,高位元組存到低地址處。

    存在不同位元組序儲存模式的原因:因為在計算機系統中是以位元組做單位的,每個地址單元對應一個位元組,一個位元組有8個位元位。不過在c語言中,除了具有一個位元組(8b)的char型別外,還有2個位元組(16b)的short型、4個位元組(32b)的int型等,而且對於位數大於8的處理器,由於暫存器寬度大於一個位元組,所以就必然存在如何安排多個位元組的問題。這就是小端儲存模式與大端儲存模式出現的原因。

    例如對於一個short型別的x資料,在記憶體中的地址為0x0010,其值為0x1122,那麼0x11是x的高位元組,0x22是x的低位元組。對於大端儲存模式,0x11放在低地址的0x0010中,0x22放在高地址的0x0011中。對於小端儲存模式則相反。

3、浮點數在記憶體中的儲存

    1)根據國際標準IEEE754,任意一個二進位制浮點數V可以表示為下面的形式:

    (-1)^S*M*2^E

    (-1)^S表示符號位,當S=0時,V為正數;當S=1時,V為負數

    M表示有效數字,大於等於1,小於2

    2^E表示指數位

    2)對於32位的浮點數和64位浮點數的不同規定

    對於32位的浮點數,最高1位是符號位S,接著是8位的指數E,剩下的23位是有效數字M。

    對於64位的浮點數,最高1位是符號位S,接著的11位是指數E,剩下的52位是有效數字M。

    3)幾點注意

    第一,對於有效數字M,因為其值大於等於1而小於2,所以在計算機中,為了能夠利用23位(52位)表示更多的資料,IEEE754規定儲存M時預設這個數的第一位為1,所以只儲存後面的部分(小數點後的位)。然後等到讀取此數的時候,再把第一位的1加上去。

    第二,對於指數E,為了能夠表示負數的指數,IEEE754規定,存入記憶體時E的真實值必須再加上一個中間數,對於8位的E,這個中間數為127;對於11位的E,這個中間數是1023。

    第三,當E全為0時,讀取該數字時有效數字M不再加上第一位的1,因為這是一個無限接近與0的數字,表示正負0;當E全為1的時候,若M全為0,則表示一個正負無窮大的數。