小白學C語言之資料在記憶體中的儲存

2021-10-24 22:17:43 字數 3330 閱讀 1693

二、 整形在記憶體中的儲存:

三.總結

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時,其實表示的就是這個浮點數的取值範圍。

那麼我們回到上面的例題,

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 。

以上就是今天要講的資料在記憶體中儲存的內容。see you lala~

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表示 負 而數值位三種表示方法各不相同。原碼直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼將原碼的符號位不變,其他位依次按位取反就可以得到了...