目錄
資料的儲存首先就要說到資料的型別,型別決定了看待記憶體空間的視角。
c語言的資料型別分為內建型別和外接型別
char(字元型)、short(短整型)、int(整型)、long(長整型)(signed或者unsigned)
float(單精度浮點型)、double(雙精度浮點型)
(1)陣列型別
此處需要注意的是,去掉陣列名就是陣列的型別
比如int arr[10],去掉陣列名arr,int [10]就是陣列資料型別
(2)結構體型別(struct)
(3)列舉型別(enum)
(4)聯合型別(union)
資料的儲存形式就是以計算機的原碼反碼補碼進行儲存的
浮點型:不以原反補的形式進行存vmzgz儲
其他的數字又分為有符號數和無符號數
無符號數:無符號數的原反補三種碼是一致的,儲存的時候沒有區別
符號數來:正數的原反補碼是相同的,但是負數的原反補碼需要經過運算轉化(正數的最高位是0,負數的最高位是1)
原碼:將二進位制按照正負數形式翻譯為二進位制數字
反碼:將原碼的每一位取反
補碼:反碼+1
儲存的時候一般儲存數字的二進位制序列補碼
同時資料的儲存存在大小端
記憶體空間具有編號,編號小的為低位址,編號大的為高位址
大端儲存:資料的低位儲存在記憶體的高位址中
小端儲存:資料的低位儲存在記憶體的低位址中
每個機器的儲存方式不同,可以用如下一段簡單**來觀察電腦是哪一種儲存方式
#include
int main()
else
return 0;
}char/signed char 所對應的儲存區間為-128~127,同時規定10000000為-128。
為了理解signed與unsigned,適用如下例題
#include
int main()
}signed與unsigned的區別就在於能否表示正負數
在資料的儲存時,是否存在符號位
signed char與cha程式設計客棧r型別的儲存也可以用乙個圖來說明
中間的分界線即為正負分界線,第一位即為符號位。符號位為1是負數,符號位為0即為正數
理解char的儲存範圍,借用如下例題
#include
#include
int main()
printf("%d", strlen(a));
return 0;
}//i是int型別,可以隨著迴圈不斷增長,但是對於a這個陣列來說,能儲存的資料有限。
//陣列a是字元型,字元型陣列能儲存的範圍就是-128~127之間,一共255個數,所以陣列長度也是255
執行結果:255
int等型別的儲存方式與ch程式設計客棧ar相似,這裡就不在多做贅述
利用乙個例子來證明浮點型儲存與整型儲存不同
#include
int main()
輸出結果:
n的值為:9
*pfloat的值為:0.000000
n的值為:1091567616
*pfloat的值為:9.000000
由此可見,單精度浮點型的指標並不能成功取出原本儲存在整形中的數字,而第二步中通過單精度浮點型的指標所更改的整形的值,n也無法成功取用,所打出來的數字並不是9。由此可見二者的儲存方式是存在較大差異的,所以下面對浮點型的儲存方式進行講解。
浮點型並不依靠資料的原反補碼進行儲存
浮點型有其特殊的規定
(e也可以理解為最高此項所對應的階次)
用例項來證明一下
比如8.5這個浮點數
轉化為二進位制
1000.1
對於這個數而言,儲存成圖中形式就是
(-1)^0*1.0001*2^3
儲存就是
0 00000011 00000000000000000010001
此時假設我們所申請到的記憶體是乙個條狀,那麼對於浮點數而言的資料儲存方式如圖所示
單精度浮點型對應的就是圖一中所示,sme分布在不同的位置,圖二的所示為雙精度浮點型,雙精度與單精度浮點型所對應的e與m不同。
(一)就是e的值,既不能全為0,也不能全為1,且e的儲存值與真實值不相同
為了表示極小的小數,比如1*10^-10,因為e本身不具有符號位,所以不能表示負數
單精度:e=真實值+127
雙精度:e=真實值+1023
加完之後再轉化為二進位制儲存為e,拿出來使用的時候再將這個數字減去
特殊情況1:e為全0
單精度的e此時的真實值為-127,該浮點數幾乎等於0,是乙個幾乎不存在的數字
特殊情況2:e為全1
單精度的e此時的真實值為128,該浮點數是為正負無窮大的數字
(二)對於m來說,m的值既然是在區間【1,2)之間,則位於整數部分的肯定為1
再次利用單精度浮點型儲存8.5
該數字的m為1.0001
為了能讓浮點數表達更大的數字,且m中處於個位的數字固定為1,之後就規定,m中個vmzgz位的1可以不再進行儲存,等到取用的時候再進行新增。
本文標題: c語言中資料的儲存詳解
本文位址:
C語言中資料的儲存記憶體
c中的資料在記憶體的儲存可以用儲存時期 作用域和鏈結來體現。儲存時期 儲存時期分為靜態的 自動的和分配的。靜態的變數一般用關鍵字static來標示 全域性變數不用static也是靜態的 它在程式開始執行的時候就為變數分配記憶體空間,在整個程式中一直存在。自動的用auto來標示 預設省略auto 變數...
關於C語言中資料在記憶體中的儲存詳解
1.資料型別詳細介紹 2.整形在記憶體中的儲存 原碼 反碼 補碼 3.大小端位元組序介紹及判斷 4.浮點型在記憶體中的儲存解析 1.整形家族 char unsigned char signed char short unsigned short int signed short int intuns...
小議C語言中資料的儲存型別
華清遠見嵌入式學院 講師。c語言中的一些說明和定義會用到儲存型別這樣乙個概念,在c語言中儲存型別會用到下述幾個關鍵字 auto,static,register,extern。看下面的簡略圖大家可以明確程式在進行儲存時是分為三個區域的,分別為 段,資料段和bss段,用於儲存不同型別和狀態的變數,而執行...