資料在記憶體中的儲存

2021-10-10 00:27:01 字數 2847 閱讀 3656

一、資料型別可分為:

①內建型別

②自定義型別

(1)常見的內建型別:

char //字元資料型別

short //短整型

int //整形

long //長整型

long long //更長的整形

float //單精度浮點數

double //雙精度整形

(2)自定義型別:

陣列型別

結構體型別

列舉型別

二、型別的基本歸類

(1)整形家族

char(乙個位元組;4bit)

unsigned char:無符號型 (範圍:0—255)

signed char:有符號型 (最高位是符號位;1表示負數;0表示正數 ;範圍: -128—127)

short(兩個位元組;8bit)

unsigned short [int]

​signed short [int]

int (四個位元組;32bit)

​unsigned int

signed int

long (四個字;,32int)

unsigned long [int]

signed long [int]

(2)浮點型家族

float:單精度浮點型

double:雙精度浮點型

(3)指標型別

int *pi

char *pc

float *pf

void *pv

(4)空型別

void表示空型別(無型別)

通常用於函式的返回型別、函式的引數、指標型別

三、整形在記憶體中的儲存

資料以二進位制的反碼形式進行儲存

原碼:直接將整形按照正負數形式翻譯成二進位制

反碼:原碼符號位不變,其他位依次按位取反(二進位制最高位為符號位,0表示正數,1表示負數)

補碼:反碼+1得到補碼

正數的原碼、補碼、反碼都相同

四、資料的儲存順序

大端儲存模式:資料低位位元組序內容儲存在記憶體高位址中,資料的高位位元組序內容儲存在低位址中。

小端儲存模式:資料低位位元組序內容儲存在記憶體低位址中,資料的高位位元組序內容儲存在高位址中。

四、浮點型在記憶體中的儲存

根據國際標準ieee754,任何二進位制浮點數都可以表示成如下形式:

(-1)^s * m * 2^e

(-1)^s表示符號位;

s=0表示正數;

s=1表示負數

m表示有效數字,在[1,2)區間內

2^e是指數字

例:十進位制:5.5

二進位制:101.11

即(-1)^0 1.011 2^2

單精度浮點型資料的儲存形式

雙精度浮點型資料的儲存形式

補充:

ieee 754對有效數字m和指數e ,還有一些特別規定。前面說過,1sm<2 ,也就是說, m可以寫成1. ***xx的形式,其中***xx表示小數部分。

ieee 754規定,在計算機內部儲存m時,預設這個數的第一位總是1 ,因此可以被捨去,只儲存後面的***xx部分。比如儲存1.01的時候,只儲存01 ,等到讀取的時候,再把第一位的1加上去。 這樣做的目的,是節省1位有效數字。以32位浮點數為例,留給m只有23位,將第一位的1捨去以後 ,等於可以儲存24位有效數字。

至於指數e ,情況就比較複雜。

首先,e為乙個無符號整數( unsigned int )這意味著,如果e為8位,它的取值範圍為0~ 255 ;如果e為11位,它的取值範圍為0~2047。但是,我們知道,科學計數法中的e是可以出現負數的,所以ieee 754規定,存入記憶體時e的真實值必須再加_上乙個中間數,對於8位的e ,這個中間數是127 ;對於11位的e ,這個中間數是1023。比如, 2^10的e是10,所以儲存成32位浮點數時,必須儲存成10+127=137 ,即10001001。

然後,指數e從記憶體中取出還可以再分成三種情況:

e不全為0或不全為1

這時,浮點數就採用下面的規則表示,即指數e的計算值減去127 (或1023) , 得到真實值,再將有效數字m前加上第一-位的1。比如: 0.5( 1/2 )的二進位制形式為0.1 ,由於規定正數部分必須為1 ,即將小數點右移1位,則為1.0*2^(-1) ,其階碼為-1+127=126 ,表示為01111110 ,而尾數1 .0去掉整數部分為0 ,補齊0到23位000000000000000000000 ,則其二進位制表示形式為:

0 01111110 00000000000000000000000

e全為0

這時 ,浮點數的指數e等於1-127 (或者1-1023 )即為真實值,有效數字m不再加上第一位的1 , 而是還原為0.***xx的小數。這樣做是為了表示+0 ,以及接近於0的很小的數字。

e全為1

這時 ,如果有效數字m全為0 ,表示無窮大(正負取決於符號位s)

資料在記憶體中的儲存

身為乙個天天處理資料的人,不得不說資料在記憶體中的儲存是必須要知道的問題。首先,資料在記憶體中的儲存涉及到作用域,儲存位置等方面的問題。根據資料的作用域,可將資料劃分為區域性變數和全域性變數 區域性變數的作用域為從定義開始到函式執行結束 全域性變數的作用域從程式開始到程式結束。計算機的記憶體分配可以...

資料在記憶體中的儲存

大端,把乙個數字高位位元組序的內容儲存到低位址,低位位元組序內容儲存到高位址處 小端,把乙個數字高位位元組序的內容儲存到高位址,低位位元組序內容儲存到低位址處 判斷乙個機器是大端還是小端?指標判斷 int checksys 聯合體 共用體 union un int main 這裡首先需要知道的是,例...

資料在記憶體中的儲存

我們都知道在計算機中資料型別都有 char 1 short 2 int 4 long 4 8 float 4 double 8 等內建型別,以及他們所佔的空間大小。型別的意義 1.使用這個型別開闢記憶體空間的大小 大小決定使用範圍 2.如何看待記憶體空間的視角。型別歸類 整形家族 char unsi...