c语言中小数在内存中的存储,c语言中小数在内存中的存储
轉(zhuǎn)至:https://blog..net/tqs_1220/article/details/73550899
首先看float和double在內(nèi)存中是怎么存儲的?
float:符號位(1位)+指數(shù)位(8位)+尾數(shù)位(23位)
范圍:-2^-128 ~2^127? (-3.40E-38~3.40E+38)
double:符號位(1位)+指數(shù)位(11位)+尾數(shù)尾(52位)
范圍:-2^-1024~2^1023(-1.79E-308~1.79E+308)
在計(jì)算機(jī)中整數(shù)的存儲是大多數(shù)人能夠輕易理解得,比如在數(shù)據(jù)寬度為1個(gè)字節(jié)時(shí),如果整數(shù)表示無符號數(shù)時(shí)就是0--15.如果整數(shù)用作有符號數(shù)時(shí):0000--01111代表十進(jìn)制的0--7。而1000--1111表示從(-8)--(-1)。然而計(jì)算機(jī)存儲數(shù)據(jù)的方式都是一樣的,并沒有區(qū)分有符號和無符號,是我們使用數(shù)據(jù)的人來確定它到底是有符號還是無符號。而有符號數(shù)據(jù)一般使用在 數(shù)據(jù)比較、數(shù)據(jù)運(yùn)算等等,其他方面差別并不是很大。
整數(shù)十分好理解,但是小數(shù)的存儲就讓人感到困難多了,很多不懂IEEE規(guī)則。我們不需要懂它的規(guī)則,我們只需要記住存儲的方法,這樣以后看到小數(shù)就能輕易地知道它在內(nèi)存中是如何存儲的了。具體分為下面幾步:
1、知道如何將十進(jìn)制的整數(shù)部分和小數(shù)部分化成二進(jìn)制。
整數(shù)就是不斷除2得到余數(shù),例:8的二進(jìn)制可進(jìn)行這樣計(jì)算:
8/2=4余數(shù)為0
4/2=2余數(shù)為0
2/2=1余數(shù)為0
1/2=0余數(shù)為1
整數(shù)從下向上看,所以8的二進(jìn)制數(shù)就是1000。
小數(shù)對應(yīng)的就是乘,例0.25的二進(jìn)制可進(jìn)行這樣計(jì)算:
0.25*2=0.5整數(shù)部分為0
0.5*2=1.0 整數(shù)部分為1
當(dāng)小數(shù)部分為0時(shí)結(jié)束運(yùn)算,像有些數(shù)據(jù)會一直進(jìn)行這種運(yùn)算例如0.4永遠(yuǎn)無法將小數(shù)部分化為0,所以就有了精度的概念。
小數(shù)從上到下看,所以0.25的二進(jìn)制數(shù)就是01。
2、知道小數(shù)的存儲是32位數(shù)據(jù)的,其中位31是符號位;位30--位23表示指數(shù)部分;位22--位0表示尾數(shù)(下面會介紹)部分。
3、不管數(shù)據(jù)的正負(fù),先按照它的絕對值將它表示為二進(jìn)制形式,注意整數(shù)和小數(shù)部分用小數(shù)點(diǎn)分開。例如:8.25可表示的二進(jìn)制形式為1000.01。
4、將8.25的二進(jìn)制形式化為科學(xué)計(jì)數(shù)法形式:1.00001*2^3,其中左移指數(shù)為正,右移指數(shù)為負(fù)。
5、開始存數(shù):
符號位 ? ? ? ? ? ? ?指數(shù)部分(8位) ? ? ? ? ? ? ? ? ? ?尾數(shù)部分(23位)
0 ? ? ? ? ? ? ? ? ? ? ? ?00000000 ? ? ? ? ? ? ? ?00000000000000000000000
尾數(shù)部分:即化為科學(xué)計(jì)數(shù)法后的小數(shù)部分,如1.00001*2^3它的尾數(shù)部分就是00001,因?yàn)樵诨癁槎M(jìn)制時(shí)是從高到低看下來的,所以在尾數(shù)部分存數(shù)時(shí)就是從高到低,8.25的尾數(shù)部分就是00001000000000000000000。
指數(shù)部分:指數(shù)部分的最高位存的是左移還是右移。左移為1,右移為0。同時(shí)將指數(shù)減一放到指數(shù)部分(指數(shù)部分最高位除外),1.00001*2^3的指數(shù)部分就是10000010。
符號部分:8.25為正數(shù),存的是0。
所以8.25在計(jì)算機(jī)中的的數(shù)據(jù)存儲就是01000001000001000000000000000000
0100 0001 0000 0100 0000 0000 0000 0000===41040000
下面講講不帶整數(shù)的小數(shù)是如何存儲數(shù)據(jù)的。
除開指數(shù)部分存儲以外,其他步驟完全一樣。我們舉例說明:0.25
0.25的二進(jìn)制形式為0.01,它化為科學(xué)計(jì)數(shù)法需要右移兩位,即1.0*2^-2。
尾數(shù)部分全0。
指數(shù)部分最高位為0(右移)。
(-2)-1=-3=FD=11111101,去除最高位,將FD低七位和指數(shù)部分最高位合在一起,即0111 1101。
0.25的32位數(shù)據(jù)即:0011 1110 1000 0000 0000 0000 0000 0000==3E800000
總結(jié)
以上是生活随笔為你收集整理的c语言中小数在内存中的存储,c语言中小数在内存中的存储的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 32位mips运算器logisim_很多
- 下一篇: Python学习笔记:Day15 部署W