C - 計算機(jī)內(nèi)存


一、原理簡介

  • 計算機(jī)在執(zhí)行程序的時候,組成程序的指令和程序鎖操作的數(shù)據(jù)都必須存儲在某個地方,這個地方就是計算機(jī)的內(nèi)存,也稱為RAM。可以將計算機(jī)的RAM想象一排井然有序的盒子。每個盒子都有兩個狀態(tài):滿為1,空為0.每個盒子稱為一個位(bit)。每8個位組成一個字節(jié),在計算機(jī)中,一個英文字母占一個字節(jié),一個中文漢字占兩個字節(jié)。
  • 計算機(jī)中常用的單位是千字節(jié)(KB),兆字節(jié)(MB),千兆字節(jié)(GB)。1KB = 1024bit,1MB = 1024KB,1GB = 1024MB。
  • 具體編譯系統(tǒng)分配給不同數(shù)據(jù)類型的內(nèi)存空間由編譯器決定,可在編譯器中由 sizeOf() 函數(shù)查看。

二、規(guī)范化的指數(shù)形式

  • 在指數(shù)形式的多種表示方式中把小樹部分中小數(shù)點錢的數(shù)字為0,小數(shù)點后第一位數(shù)字不為0的表示形式稱為規(guī)范化的指數(shù)形式,如0.43242*10^1就是4.3242的規(guī)范化的指數(shù)形式。一個實數(shù)只有一個規(guī)范化的指數(shù)形式。
  • 浮點數(shù)包括:float(單精度)、double(雙精度)、long double(長雙精度)。

三、關(guān)于溢出問題

  • 以float舉例,在內(nèi)存中分配4個字節(jié)(32位),但是4個字節(jié)有多少給小數(shù),有多少給指數(shù),是由c語言編譯系統(tǒng)自定的。
  • FLT_MINFLT_MAX 查詢最大值最小值。

四、C/C++浮點數(shù)載內(nèi)存中的存儲方式

  • 目前所有C/C++編譯器都是采用IEEE754所指定的標(biāo)準(zhǔn)浮點格式,即二進(jìn)制科學(xué)表示法。
  • 在二進(jìn)制科學(xué)表示法中,S = M*2^N 主要由三部分構(gòu)成:符號位 + 階碼(N)+尾數(shù)(M)。對于 float 型數(shù)據(jù),其二進(jìn)制有32位,其中符號位1位,階位8位,尾數(shù)23位;對于 double 型數(shù)據(jù),其二進(jìn)制為64位,符號位1位,階位11位,尾數(shù)52位。
    • 符號位:0表示正,1表示負(fù)。
    • 階碼:這里階碼采用移碼表示,對于float型數(shù)據(jù)其規(guī)定偏置量為127,階碼有正有負(fù),對于8位二進(jìn)制,其表示范圍為-128127,double型規(guī)定為1023,其表示范圍為-10241023.比如對于 float 型數(shù)據(jù),若階碼的真實值為 2,則加上127后為129,其階碼表示形式為1000010.
    • 尾數(shù):有效數(shù)字位,即部分二進(jìn)制位(小數(shù)點后面的二進(jìn)制位),因為規(guī)定M的整數(shù)部分恒為1,所以這個1就不進(jìn)行存儲了。
  • 舉例說明:
    • float型數(shù)據(jù)125.5轉(zhuǎn)換為標(biāo)準(zhǔn)浮點格式
    • 計算125.5的二進(jìn)制
      125/2 = 62...1
      62 /2 = 31...0
      31 /2 = 15...1
      15 /2 = 7 ...1
      7 /2 = 3 ...1
      3 /2 = 1 ...1
      1
      整數(shù)125二進(jìn)制表示形式為:1111101
      0.5*2 = 1
      小數(shù)部分0.5的二進(jìn)制表示形式為:1
      125.5的二進(jìn)制表示形式為:1111101.1
    • 由于規(guī)定尾數(shù)的證書部分恒為1,則表示為1.1111011*2^6,階碼為6,6+127 = 133,則表示為10000101,而對于尾數(shù)將整數(shù)部分1去掉,為1111011,在其后面補(bǔ)0使其位數(shù)達(dá)到23位,則為11110110000000000000000。
    • 二進(jìn)制表示為0 10000101 11110110000000000000000 在內(nèi)存中的存放方式:
      00000000 低地址
      00000000
      11111011
      01000010 高地址
  • 反過來根據(jù)二進(jìn)制計算浮點數(shù):
    0 10000101 11110110000000000000000
    • 符號位為0,則為證書。
    • 階碼為133-127 = 6
    • 尾數(shù)為1111011
    • 大小為1.1111011*2^6,得到1111101.1,十進(jìn)制為125.5.
  • 根據(jù)以上信息我們可以大約估計float的最大取值:
    1.11111111111111111111111 * 2^127 = 3.4 * 10^38
    ----------- 小數(shù)位23個1-----------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容