『壹』 C語言實型(浮點型)數據在內存中的存放形式
實數分為float型和double型,它們分別對應IEEE 754標准中的單精度浮點數和雙精度浮點數類型,在內存中的存儲形式遵守IEEE 754浮點數標准。以float類型數據為例,3.14159表示成二進制為11.0010010000111111001111......,規格化後表示為1.10010010000111111001111×2^1(小數點後保留23位有效數字,因為IEEE 754標准規定的尾數為23位);指數為1,故階碼為1+127=128=10000000;這是一個正數故符號位為0,因此它在內存中的表示形式是0 10000000 10010010000111111001111,寫成16進制為40490FCF。
『貳』 float和double型分別怎麼存儲
C/C++的浮點數據類型有float和double兩種。
類型float大小為4位元組,即32位,內存中的存儲方式如下: 符號位(1 bit) 指數(8 bit) 尾數(23 bit)
類型double大小為8位元組,即64位,內存布局如下: 符號位(1 bit) 指數(11 bit) 尾數(52 bit)
符號位決定浮點數的正負,0正1負。
指數和尾數均從浮點數的二進制科學計數形式中獲取。
如,十進制浮點數2.5的二進制形式為10.1,轉換為科學計數法形式為(1.01)*(10^1),由此可知指數為1,尾數(即科學計數法的小數部分)為01。
根據浮點數的存儲標准(IEEE制定),float類型指數的起始數為127(二進制0111 1111),double類型指數的起始數為1023(二進制011 1111 1111),在此基礎上加指數,得到的就是內存中指數的表示形式。尾數則直接填入,如果空間多餘則以0補齊,如果空間不夠則0舍1入。所以float和double類型分別表示的2.5如下(二進制):
符號位
指數
尾數
0
1000 0000
010 0000 0000 0000 0000 0000
0
100 0000 0000
0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
『叄』 誰能解釋浮點數在內存是怎樣存儲的嗎比如-3.14159如何存儲
以32位浮點數為例:
-3.14159轉化為二進制為-11.xxxx,後面的xxxx我就算了,你自己算,不管怎樣,小數點後面始終精確到第23位
也即-1.1xxxx*2^1,
現在開始計算:符號位是1,階碼是1+127,尾數是1xxxx
至於小數點前面那個1,不存儲,該浮點數參與計算的時候默認加上即可
看明白規律了嗎?
將其二進制形式按符號位、階碼、尾數的形式順序存入內存中的一個4位元組空間里
『肆』 浮點數 在計算機內的存儲形式
浮點數不難,但是要想記熟還真有點不容易,多琢磨琢磨。
一般情況下,浮點數的表示有一下幾個要點:
1、要規格化(讓浮點數表示結果唯一),因為100=10^2 = 0.1 * 10^3, 所以第一步要統一地規格化,確定「階數」和「尾數」(尾數在0.5-1之間,也就是二進制的0.1-1.0之間)
2、「階碼」一般用「移碼」表示法,而「尾數」一般用「原碼/補碼表示法,「數符」表示浮點數的正副號
3、浮點數的形式: 「符號位」【應該就是『數符』】+「階碼」+「尾數「
--浮點數的表示按照不同地標准,表示方法不同,你的原問題沒講清楚用什麼格式表示,我就用最常用地格式來理解了
------------------
其實就以上兩點,計算機中「『帯符號數』的表示」有四種:原碼、補碼、反碼、移碼,這些都是基礎知識,可以自己去看一下這四種表示方法,就自然明白「階符、數符」這些相當於「符號位」的作用了。
先簡單講一下吧,你再結合詳細資料看吧:【設所表示的都是定點純小數】
(小數點前面可以看成是「符號位」,也就對應原來地「階符」和「數符」)
原碼:0.11表示0.75(2^-1 + 2 ^-2), 1.11表示 『-0.75』(前面的1相當於符號位,表示這個數是負數,也就是說「符號位是0」表示正數,1表示負數)
補碼:最普遍地就是補碼了 0.11表示0.75, 1.11表示『-0.25』(也是「0」為正數,1為負數。和原碼地規律一樣)
反碼,最簡單了:正數不變,負數對每一位『取反』即可,0.11=0.75,1.10=-0.25(即0.01地相反數)
-------------以上三種表示方法,對正數的情況都不做處理,但是移碼表示法要對正數做處理。
移碼:1.01=0.25,而0.01=-0.75
。移碼復雜一點,他的表示方法是: 移碼= 2^階碼位數 + 真值(真值:指原來那個『帯符號數』,注意要把把正副號帶入計算)
-----------------------------------
N=-0.110101x2^100: 階數是「正100」,尾數是「負0.110101」,所以整個浮點數是個負數,所以第一位是「1」【第一個符號位-「數符」表示『尾數的正負號』】
階碼是「10 0100」【移碼表示法,最高位是「符號位」】
所以,應該表示為: 1(符號位) 100100(階碼的移碼表示) 11010100【尾數和符號位結合起來,用的是原碼表示法】
『伍』 浮點數在計算機裡面的存儲
這個問題比較難..其實在實際運算過程中或寫程序中我們要求的浮點數都有一定的精度,大多數情況下存成文件等形式我們一般會讓他*10^n次方來存儲去掉小數位.下面說正題.
何數據在內存中都是以二進制(0或1)順序存儲的,每一個1或0被稱為1位,而在x86CPU上一個位元組是8位。比如一個16位(2 位元組)的short int型變數的值是1000,那麼它的二進製表達就是:00000011 11101000。由於Intel CPU的架構原因,它是按位元組倒序存儲的,那麼就因該是這樣:11101000 00000011,這就是定點數1000在內存中的結構。
目前C/C++編譯器標准都遵照IEEE制定的浮點數表示法來進行float,double運算。這種結構是一種科學計數法,用符號、指數和尾數來表示,底數定為2——即把一個浮點數表示為尾數乘以2的指數次方再添上符號。下面是具體的規格:
````````符號位 階碼 尾數 長度
float 1 8 23 32
double 1 11 52 64
臨時數 1 15 64 80
由於通常C編譯器默認浮點數是double型的,下面以double為例:
共計64位,摺合8位元組。由最高到最低位分別是第63、62、61、……、0位:
最高位63位是符號位,1表示該數為負,0正;
62-52位,一共11位是指數位;
51-0位,一共52位是尾數位。
按照IEEE浮點數表示法,下面將把double型浮點數38414.4轉換為十六進制代碼。
把整數部和小數部分開處理:整數部直接化十六進制:960E。小數的處理:
0.4=0.5*0+0.25*1+0.125*1+0.0625*0+……
實際上這永遠算不完!這就是著名的浮點數精度問題。所以直到加上前面的整數部分算夠53位就行了(隱藏位技術:最高位的1 不寫入內存)。
如果你夠耐心,手工算到53位那麼因該是:38414.4(10)=1001011000001110.(2)
科學記數法為:1.001……乘以2的15次方。指數為15!
於是來看階碼,一共11位,可以表示範圍是-1024 ~ 1023。因為指數可以為負,為了便於計算,規定都先加上1023,在這里, 15+1023=1038。二進製表示為:100 00001110
符號位:正—— 0 ! 合在一起(尾數二進制最高位的1不要):
01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101
按位元組倒序存儲的十六進制數就是:
55 55 55 55 CD C1 E2 40
『陸』 請問浮點型數據在計算機是怎麼存儲的
摘要 對於浮點類型的數據採用單精度類型(float)和雙精度類型(double)來存儲,float數據佔用32bit,double數據佔用64bit。
『柒』 浮點數在計算機中的存儲方式
應該是: 在一個為32bit的存儲空間中存儲浮點數,bit0~bit22存儲有效數字部分;bit23~bit30存儲指數部分;bit31存儲符號位。 在一個為64bit的存儲空間中存儲浮點數,bit0~bit51存儲有效數字部分;bit52~bit62存儲指數部分;bit63存儲符號位。 還一種 在一個為80bit的存儲空間中存儲浮點數,bit0~bit62存儲有效數字部分;bit63~bit78存儲指數部分;bit79存儲符號位。 只有這三種了,其他都不支持的 未來可能還有128位浮點數
『捌』 浮點型數據在內存中實際的存放形式(儲存形式)
浮點型數據在內存中存儲不是按補碼形式,是按階碼的方式存儲,所以雖然int和float都是佔用了4個位元組,如果開始存的是int型數據,比如是個25,那麼用浮點的方式輸出就不是25.0,也許就變的面目全非。
你可以用共用體的方式驗證一下。在公用體中定義一個整形成員變數和一個浮點型成員變數,給整形賦值25,輸出浮點成員變數,你就知道了。
『玖』 C/C++浮點數在內存中是怎麼存儲的
把浮點數的絕對值的二進製表達的小數點移動到從左至右數第1個「1」之後,捨去1和小數點,把剩餘的原碼二進制0、1序列從左至右截取23(float型)或52(double型)位作為尾數。
在尾數前添加8(float型)或11(double型)位用移碼表示「製造」尾數時小數點移動的位數,叫階碼;階碼的最左那一位表示小數點移動的方向。
在階碼前添加1位表示整個浮點數的正負,0表示大於等於0,1表示小於0。
把這一串0、1序列在小端機上由右至左存儲在某個地址開始的連續內存單元中,這「某個地址」就是承載這個浮點型數據的變數的地址。若在大端機上則將這一串0、1序列由左至右存放。
『拾』 請問浮點型數據在計算機是怎麼存儲的
對於浮點類型的數據採用單精度類型(float)和雙精度類型(double)來存儲,float數據佔用32bit,double數據佔用64bit。
無論是單精度還是雙精度在存儲中都分為三個部分:
1、符號位(Sign) : 0代表正,1代表為負。
2、指數位(Exponent):用於存儲科學計數法中的指數數據,並且採用移位存儲。
3、尾數部分(Mantissa):尾數部分。
(10)浮點小數存儲方式擴展閱讀
實型變數分為兩類:單精度型和雙精度型,
其類型說明符為float 單精度說明符,double
雙精度說明符。在Turbo
C中單精度型佔4個位元組(32位)內存空間,其數值范圍為3.4E-38~3.4E+38,只能提供七位有效數字。
雙精度型佔8
個位元組(64位)內存空間,其數值范圍為1.7E-308~1.7E+308,可提供16位有效數字。
實型變數說明的格式和書寫規則與整型相同。
例如: float x,y; (x,y為單精度實型量)
double a,b,c; (a,b,c為雙精度實型量)
實型常數不分單、雙精度,都按雙精度double型處理。