在 C 語言中,浮點數在內存中的存儲方式為:符號位,指數,位數。float 與 double 類型的數據在計算機內部的表示法是相同的,但由于所占存儲空間的不同,其分別能夠表示的數值范圍和精度不同。如下所示:
成都創新互聯公司服務項目包括大關網站建設、大關網站制作、大關網頁制作以及大關網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,大關網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到大關省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!下來我們就來講講關于浮點數的轉換:1、將浮點數轉換成二進制;2、用科學計數法表示二進制浮點數;3、計算指數偏移后的值。注意:計算指數時需要加上偏移量,而偏移量的值與類型有關。那么實數 8.25 在內存中的 float 該怎么表示呢?8.25 的二進制表示:1000.01 ==> 1.00001 * (2 ^ 3);符號位:0; 指數:127 + 3 ==> 130 ==> 1000 0010; 小數:00001 所以內存中8.25的 float 表示:0 1000 0010 0000 1000 0000 0000 0000 000 ==> 0x4104 0000
我們在 Linux 中做個 8.25 的轉換實驗,看看它是否在內存中表示為 0x4104 0000,代碼如下:
#include <stdio.h> int main() { float f = 8.25; unsigned int* p = (unsigned int*)&f; printf("0x%08X\n", *p); return 0; }
我們看到打印出的結果如下,確實是我們分析的那樣。
在 C 語言中,int 類型的范圍為:[ -2^31, 2^31 - 1]; float 類型的范圍是:[ -3.4 * 10^38, 3.4 * 10^38 ]。float 能表示的具體數字的個數與 int 相同。可表示的數字之間不是連續的,存在間隙。它只是一種近似的表示法,不能作為精確數使用。由于內存表示法相對復雜,float 的運算速度比 int 慢的多。注意:double 與 float 具有相同的內存表示法,因此 double 也是不精確的。由于 double 占用的內存較多,所能表示的精度也就比 float 高。
下來我們做個實驗,以驗證 float 所表示的數是不精確的,代碼如下:
#include <stdio.h> int main() { float f = 3.1415f; float fl = 123456789; printf("%0.10f\n", f); printf("%0.10f\n", fl); return 0; }
我們看到打印結果如下,我們期望的 f 本應該是3.141500000,f1 本應該是 123456789.0000000000,可是結果是 f = 3.1414999962; f1 = 123456792.0000000000。這也從側面證實了我們說的是正確的,用浮點數表示的數字是不精確的。
那么關于浮點數,我們可總結為:1、浮點類型與整數類型的內存表示法不同;2、內存表示更加復雜;3、可表示的范圍更大;4、是一種不精確的類型;5、它的運算速度比較慢。關于浮點數的相關知識我們就先學習到這了,后面我們繼續學習 C 語言的其他知識。
歡迎大家一起來學習 C 語言,可以加我QQ:243343083。
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享題目:C之浮點數(三)-創新互聯
文章起源:http://vcdvsql.cn/article14/cesgde.html
成都網站建設公司_創新互聯,為您提供App設計、外貿建站、網站設計公司、商城網站、微信公眾號、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯