c語言 動態記憶體分配

2021-10-20 05:35:07 字數 2849 閱讀 4986

大小端的判斷

原碼:直接將二進位制按照正負數的形式翻譯成二進位制。其中最高位為符號位正數為1 負數為0.

反碼:將原碼的符號位不變,其他位依次按位取反就可以得到了。

補碼:反碼+1就得到補碼。

注意 : 所有的操作都是對補碼進行的 因為計算機操作是對記憶體中的補碼進行的

先看這個例子

本例可以看出 整形的9 用浮點數的讀取方式 他的數值就出現了 天翻地覆的變化 同樣 浮點數的9用整形的方式讀取也出現了類似的情況。

由此可見 浮點數的儲存方式和整形的儲存方式是不一樣的。

根據國際標準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。

注意!!!!

這裡的^ 表示多少次方

不可與十進位制混淆 這裡的1.01為二進位制數 每乘以2小數點往後靠一位在計算機內部儲存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.0*2^(-1),其階碼為-1+127=126,表示為01111110,而尾數1.0去掉整數部分為0,補齊0到23位

00000000000000000000000,則其二進位制表示形式為:

e全為0

這時,浮點數的指數e等於1-127(或者1-1023)即為真實值, 有效數字m不再加上第一位的1,而是還原為

0.******的小數。這樣做是為了表示±0,以及接近於0的很小的數字。

e全為1

這時,如果有效數字m全為0,表示±無窮大(正負取決於符號位s);

現在我們在回過頭看例題

首先我們先得出9的

同理可以得出

字元型存放的是字元對應的ascii碼表的值

定義

小端儲存:就是把乙個數的低位位元組序的內容存放到低位址處,高位位元組序的內容存放在高位址處。

高位 低位

我們觀察 得知

我們的vs2019 儲存為小端儲存

如何設計**區分 儲存方式呢

#define _crt_secure_no_warnings

#include

intdifferentiate

(i)int

main()

else

printf

("大端");

return0;

}

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

C語言動態記憶體分配

c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...

C語言 動態記憶體分配

c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...