99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

【C語言】浮點型的存儲方式-創新互聯

目錄

創新互聯是專業的清鎮網站建設公司,清鎮接單;提供成都網站建設、網站制作,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行清鎮網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

一、浮點型和整型存儲方式一樣嗎?

二、浮點型的存儲規則

2.1? S,M,E求法

2.2 如何存放S,M,E?

2.2.1 IEEE 754規定

2.2.2 特別的規定

2.2.3? 驗證

2.3?取出規則

2.3.1 E不全為0或不全為1

2.3.2 E為全0

2.3.3?E為全1

2.3.4驗證

END.


一、浮點型和整型存儲方式一樣嗎?

嘗試著做一下,看答案是否和你想得相同,如果不一樣,那你算是找對文章了。

答案1:是以整型的方式存儲,以整型的方式取出

答案2:是以整型的方式存儲,以浮點型的方式取出

答案3:是以浮點型的方式存儲,以整型的方式取出

答案4:是以浮點型的方式存儲,以浮點型的方式取出

由此我們可以得知,整型的存儲方式和浮點型的存儲方式是不一樣的

二、浮點型的存儲規則 2.1? S,M,E求法

根據國際標準IEEE 754,任何一個二進制的浮點數都能表示為以下方式

(-1)^S*M*2^E

浮點數為正數時S=0,反之S=1

M表示有效數字,在1~2之間(二進制)

2^E表示指數位

用一個實例來幫助大家理解

寫出5.5對應的式子

5.5的二進制:101.1(小數點右邊是從2的-1次方開始)

S=0(5.5為正數)

E=2(轉換成科學計數法:1.011小數點左移兩位)

M=1.011

既然浮點型可以用SEM來表示,那我們存放這三個值是不是就間接的把數據存在內存中了

所以在內存中存放浮點型就是在存放SME

2.2 如何存放S,M,E? 2.2.1 IEEE 754規定

2.2.2 特別的規定

存儲M

在我們取M時會將它轉換為1.xxxxxxxx(范圍在1~2之間的數),如此我們存儲時會一直存放一個不變的數1

IEEE 754規定:在計算機保存M時,默認他的第一位永遠是1,因此可以將它舍去,只存儲小數點后的數據,這樣還可以提高精度

存儲E

當我們在內存中存儲E時,是從第二位開始的,沒有符號位,所以它是一個無符號整數

當它占8位時(float)數據范圍0~255,占11位時(double)數據范圍0~2047

但是,我們在實際計算中E是可能出現負數的比如0.5

0.5的二進制:0.1

S:0

M:1.0(科學計數法的形式,小數點向右移1位)

E:-1

當E出現負數,但內存中不能表示負數,因為他是無符號類型的

IEEE 754規定:再存入真實的E之前要加一個中間數,8位時加127,11位時加1023,如此就可以解決出現負數的情況

2.2.3? 驗證

我們進行一個簡單的驗證,同時讓大家的記憶更加深刻

如果你在困惑內存中存放的為什么是倒過來的

這涉及到大小端的問題,在上一篇整型數據的存儲時詳細的講解了這個問題,在此就不過多贅述

【C語言】整型的存儲方式(大小端,原碼,反碼,補碼)

2.3?取出規則 2.3.1 E不全為0或不全為1

S:存的什么就取出什么

E:當E的范圍是8位時(float),存的時候+127,取得時候-127,得到的就是真實值

當E的范圍是11位時(double),存的時候+1023,取得時候-1023,得到的就是真實值

M:存的時候,只存了小數點右邊的值,取出來的時候要在前面加上1

2.3.2 E為全0

S:存的什么就取出什么

E:直接用1-127(1-1023)就為真實值

M:不用在加前面的1,直接是0.xxxxxxx

2.3.3?E為全1

存放的是無窮大的數字,存取規則和第一種情況相同。

2.3.4驗證
// 這個是上面5.5存進去的列子
// 0 10000001 01100000000000000000000
// S    E          M
// S =0 是正數
// E = (10000001)129 - 127 = 2
// M = 0.011+1 =1.011
// (-1)^S*M*2^E
// 由此可以寫出對應的數字

了解了怎樣存儲和取出浮點型數據,開頭的那道程序是否有了不一樣的見解

答案1和答案4

他們就是整型的方式存儲,整型的方式取出,浮點型的方式存儲,浮點型的方式取出

這里解析答案2和答案3

int main()
{
	int n = 9;
	float* pFloat = (float*)&n;
	//整型方式存進去的是補碼
	//00000000000000000000000000001001		//9的原碼,正數的原反補相同
	//浮點型的方式取出,就認為里面存的是浮點類型,要用浮點型的規則取出
	//0 00000000 00000000000000000001001	
	//S    E          M
	//S = 0
	//E = 1-127 = -126
	//M = 0.00000000000000000001001	
	//(-1)*0*0.00000000000000000001001	*2^-128
	//是一個非常小的數字接近于0,float精度不夠,所以只能打印出0.000000
	printf("*pFloat的值為:%f\n", *pFloat);

	*pFloat = 9.0;
	//浮點型的方式存進去,整型的方式取出來
	//9的二進制:1001		
	// S = 0
	// E = 3 +127 =130
	// M = 1.001
	//實際在內存中存儲的是
	//0 10000010 00100000000000000000000
	//用整型的方式取出,就認為存進去的是補碼(正數,原反補相同)
	//01000001000100000000000000000000 (原碼)
	//原碼換算成十進制為:1,091,567,616
	printf("num的值為:%d\n", n);
	return 0;
}

END.

有沒有一種豁然開朗的感覺呢?有沒有感覺到,生硬的規則下又透露出一絲絲的合理,讓我對前輩們又多了一份敬佩。

如果對整型的存儲有不清楚的地方,可以翻看我的另一篇文章.

【C語言】整型的存儲方式(大小端,原碼,反碼,補碼)

最后送給大家一句名言:

Genius only means hard-working all one's life. ——Mendeleyev? Russian chemist

天才只意味著終身不懈地努力。——俄國化學家 門捷列耶夫

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

本文題目:【C語言】浮點型的存儲方式-創新互聯
路徑分享:http://www.yijiale78.com/article46/cdpeeg.html

成都網站建設公司_創新互聯,為您提供網站策劃品牌網站建設網站改版電子商務軟件開發網站導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司