c語言中的基本內建型別:char
、short
、int
、long
、long long
、float
、double
為什麼存在型別這個概念,型別的意義何在?
1.使用這個型別所開闢的空間的大小,決定了它的使用範圍。型別的簡單分類:2.決定如何看待記憶體空間的視角,假如我們對乙個指標進行解引用,應該從該指標的起始位址讀多少個位元組呢?就是它的型別所決定的。
整數型別
浮點數型別
構造型別
指標型別
unsigned char
float
陣列型別
int* x
signed char
double
結構體型別(struct)
char* x
unsigned short [int]
-列舉型別(enum)
float* x
signed short [int]
-聯合型別(union)
void* x
unsigned int--
int (*x)[size] 陣列指標
signed int--
int (*fun)() 函式指標
unsigned long [int]--
…signed long [int]--
…
另外還有一種型別為:void
,表示空型別(無型別)。通常應用於函式的返回值、函式的引數、指標型別。
首先,我們先來了解幾個簡單的而且最基本的概念:
原碼、反碼、補碼
原碼:最高位為符號位(正數為0,負數為1),然後直接將絕對值翻譯成二進位制就可以了。注:正數的原碼和補碼是一樣的!反碼:將原碼的符號位保持不變,剩餘二進位制按位取反即可。
補碼:對反碼+1就可以得到對應的補碼了。
對於整數來說,在計算機中儲存的就是補碼。
那麼,我們一定有個疑問,為什麼要儲存補碼呢?存補碼不是更麻煩嗎?
在計算機系統中,數值一律用補碼來表示和儲存。其原因是。使用補碼,可以將符號位和數值域統一進行處理;同時,加法運算和減法運算可以看成一種運算,他們可以統一處理(cpu只有加法器),還有一點,我們求補碼的原碼,也就是求補碼的補碼,其運算過程一樣,也就不需要額外的硬體電路。接下來我們介紹一下,大端儲存和小端儲存:
什麼是大端小端?
大端儲存模式就是,資料的低權值位儲存在記憶體高的位址中,而資料的高權值位儲存在記憶體的低位址中。
小端儲存模式就是,資料的高權值位儲存在記憶體高的位址中,而資料的低權值位儲存在記憶體的低位址中。如何判斷大端儲存和小端儲存?
#include
intcheck_sys()
intmain()
else
return0;
}
*(char*)&i
把int*
型的指標強轉為char*
型別,然後對char*
指標進行解引用,就可以取出4個位元組中位址最低的那乙個位元組的內容,然後在主函式中if
判斷,如果取出的是1
那麼就說明低位址儲存的是低位元組的內容,就是小端儲存,反之就是大端儲存。
我們常見的浮點數型別有:float
double
long doule
。
根據國際標準ieee(電氣和電子工程協會)754,任意乙個二進位制浮點數v可以表示成下面的形式:
·(-1)s * m * 2e舉個例子:十進位制中的·(-1)s 表示符號位,當s = 0,v為正數;當s = 1,v為負數
·m表示有效數字,大於等於1,小於2
·2e表示指數字
5.0
,寫成二進位制就是101.0
,相當於1.01x2^2
。然後我們按照上面的方式,可以得出s = 0
,m = 1.01
,e = 2
。那麼,十進位制中的-5.0
,寫成上面的方式就是,s = 1
,m = 1.01
,e = 2
,只有s
不一樣。
ieee754規定:對於32位的浮點數,最高的1
位是符號位s
,接下來8
位是指數e
,剩下的23
位為有效數字m
。
注意:
e
為無符號數,那麼我們會發現,我們的無符號數就無法用來表示負數了,但是我們是需要使用負指數的,所以我們取了乙個中間數(8
位二進位制數,表示的最大的數是255
),我們就取了127
所以我們在存入的時候,就會對本身的e
加上127
,然後取出的時候,就會再次加上127
,來獲得正確的值。
我們同時也會發現,我們的有效數字m
是乙個大於1
且小於2
的數字,也就是說,它的格式一定為1.***
,那麼,我們就可以把這個1.
在存的時候去掉,只需要將***
存入即可,在我們需要取出的時候,在給它加上1.
。
特殊情況:
當e
中的8
個bit
全為0
的時候,我們會發現,真正的e
現在是0-127=-127
他就是2^-127
,這個時候無論正負,或者m
的大小,它都是乙個極小的數字,這個時候,我們規定它就為0
。
當e
中的8
個bit
全為1
的時候,我們會發現,真正的e
現在是255-127=128
它就是2^128
,這個時候無論正負,或者m
的大小,它都是乙個極大的數字,這個時候,我們規定它就為無窮大。
如果e
中的8
個bit
不全為0
或不全為1
的時候,我們就按照正常的公式(-1)s * m * 2e來進行計算。
希望本文章可以幫助你簡單理解資料在記憶體中的儲存。
作者部落格:
C語言 資料在記憶體中的儲存
字元型資料 1.字元與字元 把字元的相對應的ascii碼 整數,對映關係見ascii碼表 放到儲存碼單元中,而這些ascii 值在計算機中同樣以二進位制補碼的形式存放的。2.字元變數 字元型資料的儲存空間和值的範圍 32位操作平台 型別位元組數 取值範圍 signed char 有符號字元數 1 2...
資料在記憶體中的儲存c語言
基本內建型別 char 字元資料型別 short 短整型 int 整形 long 長整型 long long 更長的整形 float 單精度浮點數 double 雙精度浮點數使用這個型別開闢的記憶體空間大小 大小決定了適用範圍 如何看待記憶體空間的視角。在32位平台下,任何指標型別都只佔4個位元組。...
C語言 資料在記憶體中的儲存
得從整形在記憶體中的儲存說起 計算機中的有符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位三種表示方法各不相同。原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼將原碼的符號位不變,其他位依次按位取反就可以得到了...