




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C++中整形與浮點(diǎn)型如何在內(nèi)存中的存儲(chǔ)詳解目錄1數(shù)據(jù)類型1.1類型的基本歸類2整形在內(nèi)存中的存儲(chǔ)2.1二進(jìn)制的三種形式2.2大小端字的介紹3浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)3.1浮點(diǎn)數(shù)存儲(chǔ)規(guī)則
1數(shù)據(jù)類型
前面我們已經(jīng)知道了基本的內(nèi)置類型:
類型的意義:
1.使用這個(gè)類型開辟內(nèi)存空間的大小(大小決定了使用范圍)。
2.如何看待內(nèi)存空間的視角。
1.1類型的基本歸類
整形家族:
char
unsignedchar
signedchar
short
unsignedshort[int]
signedshort[int]
int
unsignedint
signedint
long
unsignedlong[int]
signedlong[int]
char的類型取決于編譯器,在VS編譯器中的char是signedchar.
浮點(diǎn)數(shù)家族:
float
double
其中的float類型精度低,存儲(chǔ)范圍小。
而double類型精度高,存儲(chǔ)范圍大。
構(gòu)造類型:
數(shù)組類型
結(jié)構(gòu)體類型struct
枚舉類型enum
聯(lián)合類型union
指針類型
int*pi;
char*pc;
float*pf;
void*pv;
空類型:
void表示空類型(無(wú)類型)
通常應(yīng)用于函數(shù)的返回類型、函數(shù)的參數(shù)、指針類型。
今天我要重點(diǎn)和大家分享的是整形家族和浮點(diǎn)數(shù)家族是如何在內(nèi)存中存儲(chǔ)的。
2整形在內(nèi)存中的存儲(chǔ)
2.1二進(jìn)制的三種形式
原碼:直接用二進(jìn)制表示。
反碼:原碼符號(hào)位不變,其他位按位取反。
補(bǔ)碼:反碼+1。
注意:
1其中正數(shù)的原碼、反碼和補(bǔ)碼相同。負(fù)數(shù)的二進(jìn)制變換規(guī)則如上。
2補(bǔ)碼變?yōu)樵a有二種辦法:
方法1
方法2
那么整形到底是以哪種形式的二進(jìn)制存儲(chǔ)在內(nèi)存中的呢?
實(shí)際是整形是以補(bǔ)碼的形式存儲(chǔ)在內(nèi)存中的。
在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)表示和存儲(chǔ)。原因在于,使用補(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)一處理;
同時(shí),加法和減法也可以統(tǒng)一處理(CPU只有加法器)此外,補(bǔ)碼與原碼相互轉(zhuǎn)換,其運(yùn)算過(guò)程是相同的,不需要額外的硬件電路。
這什么是的啥啊
其實(shí)剛剛學(xué)到這里,我也有點(diǎn)懵逼,為什么要用補(bǔ)碼存呢?下面我給大家舉例
1-1這的運(yùn)算結(jié)果是怎么進(jìn)行的呢
1的原碼(在32位平臺(tái)上):00000000000000000000000000000001
-1的原碼(在32位平臺(tái)上):10000000000000000000000000000001
-1的反碼(在32位平臺(tái)上):111111111111111111111111111111111110
-1的補(bǔ)碼(在32位平臺(tái)上):111111111111111111111111111111111111
因?yàn)镃PU只有加法器,所以1-1----1+(-1)
顯然無(wú)論是1的原碼還是反碼和-1的原碼或者補(bǔ)碼相加都得不到結(jié)果。
而補(bǔ)碼確可以100000000000000000000000000000000(這里33),而我們是32位平臺(tái),所以最終結(jié)果為00000000000000000000000000000000(0,看到這里是不是覺的補(bǔ)碼很神奇。所以:整數(shù)在內(nèi)存中存的是補(bǔ)碼。
雖然我們明白內(nèi)存中存的是補(bǔ)碼,但我們還是不知道補(bǔ)碼在內(nèi)存中是怎么存的,下面我們就要說(shuō)到大小端字。
2.2大小端字的介紹
下面我們以整數(shù)1來(lái)理解
大端字節(jié)序存儲(chǔ)
就是把一個(gè)數(shù)據(jù)的高位字節(jié)序的內(nèi)容放在低地址處,低位字節(jié)序的內(nèi)容反在高地址處。
我們用16進(jìn)制表示分布
小端字節(jié)序存儲(chǔ)
就是把一個(gè)數(shù)據(jù)的高位字節(jié)序的內(nèi)容放在高地址處,低位字節(jié)序的內(nèi)容反在低地址處。
下面是在vs中的存儲(chǔ)分布
大小端字節(jié)序的存儲(chǔ)是和硬件有關(guān),有硬件是小端存儲(chǔ),的有是大端存儲(chǔ)。
3浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)
很多人多會(huì)想,整形是以補(bǔ)碼的形式存儲(chǔ)在內(nèi)存中,存儲(chǔ)方式于大小端有關(guān),那么浮點(diǎn)型又是怎么存儲(chǔ)的呢?
從上面我們可能看出肯定不是和整形的存儲(chǔ)方式有關(guān)。
3.1浮點(diǎn)數(shù)存儲(chǔ)規(guī)則
根據(jù)國(guó)際標(biāo)準(zhǔn)IEEE(電氣和電子工程協(xié)會(huì))754,任意一個(gè)二進(jìn)制浮點(diǎn)數(shù)V可以表示成下面的形式:
(-1)^S*M*2^E
(-1)^S表示符號(hào)位,當(dāng)S=0,V為正數(shù);當(dāng)S=1,V為負(fù)數(shù)。
M表示有效數(shù)字,大于等于1,小于2。
2^E表示指數(shù)位。
那么1.0就可以寫成
(-1)^0*1.0*2^0(2^n次方是二進(jìn)制的科學(xué)計(jì)算法的形式)
其中二點(diǎn)S=0,M=1.0,E=0
那么9.5我們就可以寫成
(-1)^0*1.0011*2^3
而9.6呢?
我們發(fā)現(xiàn)我們始終都無(wú)法表示出0.6,只能不斷的接近這個(gè)數(shù),所以浮點(diǎn)型在內(nèi)存中的存儲(chǔ)是一個(gè)精確值而不是一個(gè)準(zhǔn)確值。
IEEE754規(guī)定:
對(duì)于32位的浮點(diǎn)數(shù),最高的1位是符號(hào)位s,接著的8位是指數(shù)E,剩下的23位為有效數(shù)字M。
對(duì)于64位的浮點(diǎn)數(shù),最高的1位是符號(hào)位S,接著的11位是指數(shù)E,剩下的52位為有效數(shù)字M。
IEEE754對(duì)有效數(shù)字M和指數(shù)E,還有一些特別規(guī)定。
前面說(shuō)過(guò),1M2,也就是說(shuō),M可以寫成1.xxxxxx的形式,其中xxxxxx表示小數(shù)部分。IEEE754規(guī)定,在計(jì)算機(jī)內(nèi)部保存M時(shí),默認(rèn)這個(gè)數(shù)的第一位總是1,因此可以被舍去,只保存后面的xxxxxx部分。比如保存1.01的時(shí)候,只保存01,等到讀取的時(shí)候,再把第一位的1加上去。這樣做的目的,是節(jié)省1位有效數(shù)字。以32位浮點(diǎn)數(shù)為例,留給M只有23位,將第一位的1舍去以后,等于可以保存24位有效數(shù)字。
至于指數(shù)E,情況就比較復(fù)雜。
首先,E為一個(gè)無(wú)符號(hào)整數(shù)(unsignedint)
這意味著,如果E為8位,它的取值范圍為0~255;如果E為11位,它的取值范圍為0~2047。但是,我們知道,科學(xué)計(jì)數(shù)法中的E是可以出現(xiàn)負(fù)數(shù)的,所以IEEE754規(guī)定,存入內(nèi)存時(shí)E的真實(shí)值必須再加上一個(gè)中間數(shù),對(duì)于8位的E,這個(gè)中間數(shù)是127;對(duì)于11位的E,這個(gè)中間數(shù)是1023。比如,2^10的E是10,所以保存成32位浮點(diǎn)數(shù)時(shí),必須保存成10+127=137,即10001001。
指數(shù)E從內(nèi)存中取出還可以再分成三種情況:
E不全為0或不全為1
這時(shí),浮點(diǎn)數(shù)就采用下面的規(guī)則表示,即指數(shù)E的計(jì)算值減去127(或1023),得到真實(shí)值,再將有效數(shù)字M前加上第一位的1。比如:0.5(1/2)的二進(jìn)制形式為0.1,由于規(guī)定正數(shù)部分必須為1,即將小數(shù)點(diǎn)右移1位,則為1.0*2^(-1),其階碼為-1+127=126,表示為01111110,而尾數(shù)1.0去掉整數(shù)部分為0,補(bǔ)齊0到23位00000000000000000000000,則其二進(jìn)制表示形式為:00111111000000000000000000000000
E全為0
這時(shí),浮點(diǎn)數(shù)的指數(shù)E等于1-127(或者1-1023)即為真實(shí)值,有效數(shù)字M不再加上第一位的1,而是還原為0.xx
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高標(biāo)準(zhǔn)廠房租賃安全生產(chǎn)及環(huán)境保護(hù)管理協(xié)議
- 餐飲公司股東投資收益分配合同
- 拆除工程安全責(zé)任及補(bǔ)償協(xié)議范本
- 車輛租賃平臺(tái)傭金分成合同
- 互聯(lián)網(wǎng)教育代理記帳與課程資源整合合同
- 資源開發(fā)項(xiàng)目參股合作協(xié)議范本
- 產(chǎn)權(quán)拍賣合同范本
- 餐飲店拆伙退伙協(xié)議書(合同解除原因)
- 美食街特色餐飲攤位租賃及食品安全保障合同
- 特種礦產(chǎn)資源采礦權(quán)出讓與科研開發(fā)合同
- 副舟骨損傷查房
- 女性領(lǐng)導(dǎo)力智慧樹知到課后章節(jié)答案2023年下山東女子學(xué)院
- 沖壓成型精密五金機(jī)構(gòu)件生產(chǎn)QC工程圖
- 工程量確認(rèn)單范本
- 抖音直播運(yùn)營(yíng)團(tuán)隊(duì)薪酬績(jī)效考核管理方案(直播帶貨團(tuán)隊(duì)薪酬績(jī)效提成方案)
- 2022-2023學(xué)年遼寧省大連市沙河口區(qū)數(shù)學(xué)五下期末復(fù)習(xí)檢測(cè)模擬試題含答案
- 2023年廣東省珠海市經(jīng)濟(jì)技術(shù)開發(fā)區(qū)事業(yè)單位招聘(共500題含答案解析)高頻考點(diǎn)題庫(kù)參考模擬練習(xí)試卷
- 2023年國(guó)家開放大學(xué)(國(guó)開電大)《機(jī)電一體化系統(tǒng)設(shè)計(jì)基礎(chǔ)》期末考試備考題庫(kù)筆試+一平臺(tái)機(jī)考
- 裝修合同保密協(xié)議
- 安全設(shè)備設(shè)施與個(gè)人防護(hù)用品的使用和維護(hù)
- 110kV及以下輸電線路鋼管桿標(biāo)準(zhǔn)化設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論