二、 整形在記憶體中的儲存:
三.總結
char
//字元資料型別
short
//短整型
int//整形
long
//長整型
long
long
//更長的整形
float
//單精度浮點數
double
//雙精度浮點型
型別的意義
使用這個型別開闢的記憶體空間大小(大小決定了適用範圍)。
整形
char
unsigned
char
signed
char
short
unsigned
short
[int
]signed
short
[int
]int
unsigned
intsigned
intlong
unsigned
long
[int
]signed
long
[int
]
浮點型
float
double
構造型別
> 陣列型別
> 結構體型別 struct
> 列舉型別 enum
> 聯合型別 union
指標型別 空型別:void
表示空型別(無型別)通常應用於函式的返回型別、函式的引數、指標型別。
注意:1. void 是型別,不能定義變數,空型別對應的大小是0。所以 void 無法開闢空間,即無法定義變數。
3. void* 可以定義變數,在 32 位平台下,大小是4個位元組,但是不能解引用,需要進行強制型別轉換。
4. c 語言中函式的返回值型別可以省略,但是省略之後預設為 int。
計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種方法均有符號位和數值位兩部分,符號位 0 表示正數, 符號位 1 表示負數,而數值位,三種表示方法各不相同。正數的原碼、反碼、補碼相同。
原碼:直接將二進位制按照正負數的形式翻譯成二進位制就可以了。
反碼:將原碼的符號位不變,其他位依次按位取反就可以得到了。
補碼:反碼 +1 就得到補碼。定義兩個變數:
int a =20;
int b =-10
;
大端(儲存)模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;
小端(儲存)模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位,,儲存在記憶體的高位址中為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著一 個位元組,乙個位元組為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處理器還可以由硬體來選擇是大端模式還是小端模式.
判斷機器大小端的**:
#include
union un
;int
main()
**如下:
int
main
(void
)
結果:
為什麼呢?
根據國際標準ieee 754,任意乙個二進位制浮點數v可以表示成下面的形式:
· (-1)^s * m * 2^e。
· (-1)^s 表示符號位,當s == 0, v為正數;當s == 1, v為負數。
· m表示有效數字,大於等於1,小於2、
· 2^e表示指數字。
2.ieee 754規定:對於32位浮點數,最高的1位是符號位s, 接著的8位是指數e,剩下的23位為有效數字m。
e的兩種特殊取值:
e全為0:
當e全為0的時候,即2的次方為0 - 127 為2^-127次方,所以,當s = 0時,乙個正數的2^-127次方,是乙個從數軸的右邊無線趨近於0的數字;而當s = 1時,乙個負數的2^-127次方是從數軸左邊無線趨近於0的數字。
所以當e全為0的時候,實際就表示的是±0,所以浮點數不可以在程式**現 與0去比較(浮點數 == 0),而是要跟一段範圍去比較。
e全為1:
當e全為1的時候(如果m全為0),即2的次方255 - 127 = 128,所以當s = 0時,表示1 * 2^128次方,當s = 1時表示-1*2^128次方。
所以當e全為1時,其實表示的就是這個浮點數的取值範圍。
那麼我們回到上面的例題,以上就是今天要講的資料在記憶體中儲存的內容。see you lala~n = 9 的儲存方式是 0000 0000 0000 0000 0000 0000 0000 1001 float *pfloat = (float )&n 將n強制型別轉換為float型系統就是認為上面的儲存方式是浮點數的儲存方式。 即1.000000000000000000010012^-127 是乙個及其接近0的數字,所以列印0
第二種輸入方法一樣,給指標賦值9.0,指標是浮點型,所以系統按照浮點數的儲存方式存放這個數字, n為整形,系統輸出n的時候按照整形的在記憶體中的儲存方式去讀, 所以輸出n為乙個非常大的數字,還原成十進位制,正是 1091567616 。
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表示 負 而數值位三種表示方法各不相同。原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼將原碼的符號位不變,其他位依次按位取反就可以得到了...