當前位置:首頁 » 存儲配置 » 浮點數的存儲

浮點數的存儲

發布時間: 2022-02-24 05:31:09

c語言浮點型是怎樣存儲

C語言中的float類型佔用4個位元組長,這4個位元組分為如下3部分:
1位符號位 8位階碼 23位尾數部分
這23位尾數才真正存儲了二進制的有效位,將這23位二進制轉換為十進制也就6到7位有效數字。

㈡ 計算機是如何存儲浮點數的(工作原理,實現方式)

計算機用二進制來表示數字,浮點數也是如此:
首先了解如何用二進製表示小數(也就是如何把十進制小數轉化為二進製表示):
舉一個簡單例子,十進制小數 10.625
1)首先轉換整數部分:10 = 1010b
2)小數部分0.625 = 0.101b
(用「乘2取整法」:0.625*2=1.25,得第一位為1,0.25*2=0.5,得第二位為0,0.5*2=1, 得第三位為1,餘下小數部分為零,就可以結束了)
3)於是得到 10.625=1010.101b
換個表示方式更加深入理解:
1*(10^1)+0*(10^0)+6*(10^-1)+2*(10^-2)+5*(10^-3) =
1*(2^3) + 0*(2^2) + 1*(2^1) + 0*(2^0) + 1*(2^-1) + 0*(2^-2) + 1*(2^-3)
4) 類似十進制可以用指數形式表示:
10.625=10625*(10^-3)
所得的二進制小數也可以這樣指數形式表述:
1010.101b=1010101 * (2^-3)
也就是用有效數字a和指數e來表述: a * (2^e)
用一個32bit的空間(bit0~bit31)來存儲這么一個浮點數,如此分配存儲空間:
bit0 ~ bit22 共23bit,用來表示有效數字部分,也就是a,本例中a=1010101
bit23 - bit30 共8個bit,用來表是指數,也就是e,范圍從-128到127,實際數據中的指數是原始指數加上127得到的,如果超過了127,則從-128開始計,所以這里e=-3表示為124
bit31 為符號位,1表示負數,這里應該為0
把上述結果填入32bit的存儲器,就是計算機表示小數10.625的形式。

注意這個例子的特殊性:它的小數部分正好可以用有限長度的2進制小數表示,因此,而且整個有效數字部分a的總長度小於23,因此它精確的表示了10.625,但是有的情況下,有效數字部分的長度可能超過23,甚至是無限多的,那時候就只好把後面的位數截掉了,那樣表示的結果就只是一個近似值而非精確值;顯然,存儲長度越長,精度就越高,比如雙精度浮點數長度為64位,1位符號位,11位指數位,52位有效數字。

㈢ 浮點數的存儲問題

先看看浮點數格式
·一個浮點數總共有4個位元組,32位
第一個比特表符號 0正數 1負數
後八個比特表階碼,即為指數,這個數在實際的數上面加127
最後23個比特表尾數 原碼表示

具體分析
對於3.25

正數 首位為0

用二進製表示 11.01=1.101乘以2的1次方
所以階碼為1 127+1=128
10000000

對於尾數1.101,因為規格化的數都是最高位為1,即小數點左邊的數為1
所以這個1就省略,因此存儲的時候就存101

10100000 00000000 0000000

把所有的拼起來
01000000 01010000 00000000 00000000

你的上面最後寫反了

㈣ 單片機的浮點數存儲

float t=523.5;
char *p = (char*)&t;
就像這樣讀取第一位元組,char *p = (char*)&t+1;
讀取第二位元組,以此類推然後一位元組一位元組的讀出數據保存在24裡面,最後按順序讀回去

㈤ 浮點數 在計算機內的存儲形式

浮點數不難,但是要想記熟還真有點不容易,多琢磨琢磨。

一般情況下,浮點數的表示有一下幾個要點:

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【尾數和符號位結合起來,用的是原碼表示法】

㈥ 單片機里浮點數是怎麼存放的

可以這么說:任何存儲器,無論是pc機,單片機,甚至內存卡的基本存儲模塊都是一樣
的結構(當然是對於ram而言),都是一個存儲單元對應地址線的一種組合相應存儲一個位元組,物理結構是裡面的八個觸發器,每個觸發器對應一個位元組。至於浮點數和整型數理論上沒什麼區別了把,就在多一個位元組存放小數點吧。

㈦ 關於浮點數在C語言中的存儲問題

寫c==2.468f就可以。
浮點數常量默認是double型。你直接寫2.468會強轉型。

㈧ 電腦中浮點數存儲問題

一個16位或32位浮點數,一部分位數用來儲存10的指數部分,其他位數用來儲存有效數字,還有正負號,如果10的指數部分很大,有效數字部分不夠用,就會舍棄一部分,當然不能精確存儲了。不過大多數應用下都可以保證精度。

㈨ c語言中浮點型數據的存儲方式

所謂浮點數, 其實就是二進制的科學計數法. 十進制的科學計數法為 a.b * 10^n (這里 "^" 表示冪). 其中a 大於或等於1而小於10. 只有0不能用這個形式表示.

二進制的科學計數法為 1.x *10^N, 整數部分恆為1, 所以只要存貯X與N就可以.一般都是用一個位存貯符號, 再用幾個二進制位存貯X, 另幾個二進制位存貯N. 原則就是這樣了, 但具體的格式又有所區別. 比如按IEEE來說, 有單精度, 雙精度等; 還有一些軟體自己定義的格式, 空間哪些位存貯X, 哪些位存貯N, 0怎麼辦, NaN怎麼表示, 等等都要自己規定.

㈩ 請問浮點型數據在計算機是怎麼存儲的

摘要 對於浮點類型的數據採用單精度類型(float)和雙精度類型(double)來存儲,float數據佔用32bit,double數據佔用64bit。

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:237
java駝峰 發布:2025-02-02 09:13:26 瀏覽:652
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726