資料型別介紹
char //字元資料型別
short //短整型
int //整形
long //長整型
long long //更長的整形
float //單精度浮點數
double //雙精度浮點數
型別的基本歸類
unsigned(無符號類)
signed(有符號類)
浮點數家族
float
double
指標型別
int pi;
char pc;
float pf;
void pv;
整形在記憶體中的儲存
原碼、反碼、補碼。
計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。
三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位
三種表示方法各不相同。
原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。
反碼將原碼的符號位不變,其他位依次按位取反就可以得到了。
補碼反碼+1就得到補碼。
正數的原、反、補碼都相同。
對於整形來說:資料存放記憶體中其實存放的是補碼。
大小端介紹
什麼大端小端:
大端(儲存)模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;
小端(儲存)模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位,,儲存在記憶體的高位址中。
為什麼有大端和小端:
為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著一
個位元組,乙個位元組為8bit。但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具
體的編譯器),另外,對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個字
節,那麼必然存在著乙個如果將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。
例如乙個 16bit 的 short 型 x ,在記憶體中的位址為 0x0010 , x 的值為 0x1122 ,那麼 0x11 為高位元組, 0x22
為低位元組。對於大端模式,就將 0x11 放在低位址中,即 0x0010 中, 0x22 放在高位址中,即 0x0011 中。小
端模式,剛好相反。我們常用的 x86 結構是小端模式,而 keil c51 則為大端模式。很多的arm,dsp都為小
端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。
浮點型在記憶體中的儲存
常見的浮點數:
3.14159 1e10 浮點數家族包括: float、double、long double 型別。 浮點數表示的範圍:float.h中定義
浮點數儲存的例子:
int
main()
{int n =9;
float
*pfloat =
(float*)
&n;printf
("n的值為:%d\n"
,n);
printf
("*pfloat的值為:%f\n"
,*pfloat)
;*pfloat =
9.0;
printf
("num的值為:%d\n"
,n);
printf
("*pfloat的值為:%f\n"
,*pfloat)
;
執行結果:
num 和 pfloat 在記憶體中明明是同乙個數,為什麼浮點數和整數的解讀結果會差別這麼大? 要理解這個結果,一定
要搞懂浮點數在計算機內部的表示方法。
詳細解讀:
根據國際標準ieee(電氣和電子工程協會) 754,任意乙個二進位制浮點數v可以表示成下面的形式:
(-1)^s * m * 2^e
(-1)^s表示符號位,當s=0,v為正數;當s=1,v為負數。
m表示有效數字,大於等於1,小於2。
2^e表示指數字。
舉例來說: 十進位制的5.0,寫成二進位制是 101.0 ,相當於 1.01×2^2 。 那麼,按照上面v的格式,可以得出s=0,
m=1.01,e=2。
十進位制的-5.0,寫成二進位制是 -101.0 ,相當於 -1.01×2^2 。那麼,s=1,m=1.01,e=2。
ieee 754規定: 對於32位的浮點數,最高的1位是符號位s,接著的8位是指數e,剩下的23位為有效數字m。
對於64位的浮點數,最高的1位是符號位s,接著的11位是指數e,剩下的52位為有效數字m。
ieee 754對有效數字m和指數e,還有一些特別規定。 前面說過, 1≤m<2 ,也就是說,m可以寫成 1.****** 的形
式,其中******表示小數部分。
ieee 754規定,在計算機內部儲存m時,預設這個數的第一位總是1,因此可以被捨去,只儲存後面的******部分。
比如儲存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.02^(-1),其階碼為-1+127=126,表示為01111110,而尾數1.0去掉整數部分為0,補齊0到23位
00000000000000000000000,則其二進位制表示形式為: 0 01111110 00000000000000000000000
e全為0
這時,浮點數的指數e等於1-127(或者1-1023)即為真實值, 有效數字m不再加上第一位的1,而是還原為
0.******的小數。這樣做是為了表示±0,以及接近於0的很小的數字。
e全為1
這時,如果有效數字m全為0,表示±無窮大(正負取決於符號位s);
好了,關於浮點數的表示規則,就說到這裡。
PostgreSQL的資料儲存 八 資料儲存
在作業系統層面,資料儲存,只是一些二進位制資訊,這個層次,是不知道檔案內容的含義的。檔案的邏輯含義,取決於應用層面。資料庫系統的檔案組織,也如此。在外存儲存,以二進位制格式存放,讀寫檔案,以塊 8k 為單位,讀入的資料,存放與資料緩衝區,所以,資料的邏輯含義,始於資料緩衝區。在bufpage.h檔案...
資料的儲存
1.整形在記憶體中的儲存 1 在計算機系統中,整數統一用補碼來表示和儲存。原碼 直接將二進位制按照正負數的形式翻譯成二進位制。反碼 將原碼的符號位不變,其他位按位取反。補碼 反碼加1就得到補碼。正數的原碼,反碼,補碼都相同 2 在記憶體中儲存時,還有大小端儲存方式 大端 儲存 模式,是指資料的低位儲...
資料的儲存
列表是一種儲存大量資料的儲存模型。列表具有索引的概念,可以通過索引操作列表中的資料。列表中的資料可以進行新增 刪除 修改 查詢等操作。建立列表 變數名 資料1,資料2,獲取列表資料 變數名 索引 修改列表資料 變數名 索引 值 元組是一種儲存固定資料的儲存模型。元組具有索引的概念,可以通過索引操作元...