變數的存儲分配
Ⅰ 定義整形變數int,系統給他們各分配2位元組的存儲空間,其數值范圍為:--32768~32767,范圍是如何得的
范圍:一個位元組是8位二進制數,長整形變數系統分配4位元組,就是分配了4×8位二進制數,數值范圍就是:—2的31次方。其他的類似。
有效數字:
浮點數7位有效數字。
雙精度數16位有效數字。
C/C++中浮點數的表示遵循IEEE 754標准。
一個浮點數由三部分組成:符號位S、指數部分E(階碼)以及尾數部分M(如下)。
Floating
S--------E-------M
1位-----8位-----23位
Double
S--------E-------M
1位-----11位----52位
十進制數的換算計算公式為(n^m表示n的m次冪,B表示前面的數字是二進制):
S * 2^(E-127) * (1.M)B
浮點數的精度取決於尾數部分。尾數部分的位數越多,能夠表示的有效數字越多。
單精度數的尾數用23位存儲,加上默認的小數點前的1位1,2^(23+1) = 16777216。因為 10^7 < 16777216 < 10^8,所以說單精度浮點數的有效位數是7位。
雙精度的尾數用52位存儲,2^(52+1) = 9007199254740992,10^16 < 9007199254740992 < 10^17,所以雙精度的有效位數是16位。
Ⅱ 在C語言中,全局變數的存儲類別是
全局變數的存儲類別是靜態存儲區。
變數分為局部與全局,局部變數又可稱之為內部變數。由某對象或某個函數所創建的變數通常都是局部變數,只能被內部引用,而無法被其它對象或函數引用。
全局變數既可以是某對象函數創建,也可以是在本程序任何地方創建。全局變數是可以被本程序所有對象或函數引用。
由下圖可以看出a、b、x、y 都是在函數外部定義的外部變數,都是全局變數。但x,y 定義在函數f1之後,而在f1內又無對x,y的說明,所以它們在f1內無效。 a,b定義在源程序最前面,因此在f1,f2及main內不加說明也可使用。
全局變數是使用相同的內存塊在整個類中存儲一個值全局變數extern與static,extern在其他源程序中也可以使用;static只能在本程序中使用。
(2)變數的存儲分配擴展閱讀:
數據區可以分為靜態數據區(全局數據區)和動態數據區,後者又可分為堆區和棧區。之所以這樣劃分,是因為它們存放的數據和對應的管理方法不同。
靜態數據區、棧區和堆區的存儲空間分別遵循3種不同的規則:靜態存儲分配、棧式存儲分配和堆式存儲分配。後兩種分配方式皆稱為「動態存儲分配」,因為這兩種方式中存儲空間並不是在編譯的時候靜態分配好的,而是在運行時才進行的。
某些編程語言,如早期的FORTRAN語言及COBOL語言等,其存儲分配是完全靜態的,程序的數據對象與其存儲的綁定是在編譯期間進行的,稱為靜態語言。
而對於另一些語言,所有數據對象與其存儲的綁定只能發生在運行期間,此類語言稱為動態語言,如Lisp、ML、Perl等。多數語言(如C/C++、Java、Pascal等)採取的存儲分配策略是介於二者之間的。
Ⅲ 51單片機定義變數時默認是存儲到哪裡的
未顯式聲明的情況下,變數會根據Memory Model的設置,默認分配在指定的存儲區。
Small模式:默認分配在data區
Compact模式:默認分配在pdata區
Large模式:默認分配在xdata區
新建工程默認都是Small模式,所以未顯式聲明存儲區域的變數都會分配在data區的。所以才會容易出現data區擠爆、編譯器跳著腳讓你把變數分到idata區去……
Ⅳ 全局變數的存儲空間在什麼時候分配分配在哪
在程序開始執行的時候給全局變數分配存儲區,分配到靜態存儲區中,程序執行完畢就釋放。
靜態局部變數是在編譯時賦初值的,在靜態存儲區內分配存儲單元。