浮點數(shù)轉二進制數(shù)

浮點數(shù)在計算機中是如何表示的偏形?

學過《計算機組成原理》或者類似《計算機系統(tǒng)》這些課程的小伙伴們應該都知道,浮點數(shù)在計算機中的存儲方式遵循IEEE 754 浮點數(shù)計數(shù)標準纲菌,可以表示為:

采用尾數(shù) + 階碼的編碼方式,更通俗一點說贾陷,就是類似于數(shù)學課本上所學的科學計數(shù)法表示方式:有效數(shù)字 + 指數(shù)位

因此嘱根,只要給出:符號(S)髓废、階碼部分(E)尾數(shù)部分(M)這三個維度的信息该抒,一個浮點數(shù)的表示就完全確定下來了慌洪,所以float和double這兩種類型的浮點數(shù)在計算機中的存儲結構就表示成下圖所示這個樣子:

1、符號部分(S)

0-正1-負

2凑保、階碼部分(E)(指數(shù)部分)

對于float型浮點數(shù)冈爹,指數(shù)部分8位,考慮可正可負欧引,因此可以表示的指數(shù)范圍為-127 ~ 128

對于double型浮點數(shù)频伤,指數(shù)部分11位,考慮可正可負芝此,因此可以表示的指數(shù)范圍為-1023 ~ 1024

3憋肖、尾數(shù)部分(M)

浮點數(shù)的精度是由尾數(shù)的位數(shù)來決定的:

對于float型浮點數(shù),尾數(shù)部分23位婚苹,換算成十進制就是2^23=8388608岸更,所以十進制精度只有6 ~ 7位;

對于double型浮點數(shù)膊升,尾數(shù)部分52位怎炊,換算成十進制就是2^52 = 4503599627370496,所以十進制精度只有15 ~ 16位

所以廓译,浮點數(shù)交給計算機存儲的時候结胀,可能會有精度丟失問題!T鹧糟港!因此使用時需要格外小心,如果真因為這一塊出了bug院仿,定位問題還是非常艱難的秸抚,所以預防工作要做好。

進制轉換計算案例

上面說的是IEEE標準規(guī)定的內容歹垫,屬于理論規(guī)約剥汤。那一個小數(shù)到底要怎么換算成二進制呢?我們得拿實際例子來解釋排惨。

先來個簡單的例子

比如:把十進制小數(shù)0.875轉換成二進制吭敢,具體怎么操作?

可以分幾大步走:

1暮芭、以小數(shù)點為界鹿驼,拆分

2欲低、整數(shù)部分轉換

整數(shù)轉二進制我想大家應該都熟悉,使用:除2取余法即可畜晰。而這里的0.875整數(shù)部分為0砾莱,無需操作。

3凄鼻、小數(shù)部分轉換

小數(shù)部分的轉換不同于整數(shù)部分腊瑟,采用的是“乘2取整法”,圖示一下就明白了:

4块蚌、合并結果

整數(shù)部分 + 小數(shù)部分闰非,最終得到二進制結果為0.111。

所以該結果按照上一節(jié)所述的尾數(shù) + 階碼的計算機計數(shù)方式峭范,則可以表示為:

所以對應可得:

符號位:0

階碼(E)部分:若以float為例河胎,應為127 +(-1)= 126,因此二進制表示為:01111110

尾數(shù)部分(M):若以float為例虎敦,應為23位游岳,因此尾部補齊后為11000000000000000000000。

因此最終的總結果為(以32位精度float表示):

00111111011000000000000000000000

再來個復雜點例子

再比如:把十進制小數(shù)6.36轉換成二進制其徙,具體怎么操作胚迫?

但凡能用圖示,我就不想寫文字唾那,所以用一張圖就可以解釋得明明白白:

整數(shù)部分 + 小數(shù)部分访锻,因此最終得到的結果二進制結果為110.01011100...。

還是按照上一節(jié)所述的尾數(shù) + 階碼的計算機計數(shù)方式闹获,則可以表示為:

所以對應可得:

符號位:0

階碼(E)部分:若以float為例期犬,應為127 +(2)= 129,因此二進制表示為:10000001

尾數(shù)部分(M):1001011100...避诽,其實它本身無限不循環(huán)龟虎,但若以float型精度來截取23位,則可以表示為10010111000010100011111

因此最終的總結果為(以32位精度float表示):

01000000110010111000010100011111

所以像這種無限位數(shù)的尾數(shù)情況沙庐,用計算機存儲產生截取是必然的鲤妥,必定會有一定的精度損失!所以這也從根本上解釋了為什么float或者double這種類型數(shù)據(jù)使用時的風險性拱雏,因此必須要結合實際業(yè)務理性考量棉安。

還有一個神器

大家如果對上面的計算結果不放心,或者想檢查手動換算的結果是否正確铸抑,也有直接的這種二進制轉換工具站贡耽,典型的比如:binaryconvert.com

不想手動換算的,直接去上面輸入,轉換一下即可得到結果蒲赂,而且可以進制互換:

參考:CodeSheep

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末阱冶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凳宙,更是在濱河造成了極大的恐慌,老刑警劉巖职祷,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氏涩,死亡現(xiàn)場離奇詭異,居然都是意外死亡有梆,警方通過查閱死者的電腦和手機是尖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泥耀,“玉大人饺汹,你說我怎么就攤上這事√荡撸” “怎么了兜辞?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夸溶。 經(jīng)常有香客問我逸吵,道長,這世上最難降的妖魔是什么缝裁? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任扫皱,我火速辦了婚禮,結果婚禮上捷绑,老公的妹妹穿的比我還像新娘韩脑。我一直安慰自己,他們只是感情好粹污,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布段多。 她就那樣靜靜地躺著,像睡著了一般壮吩。 火紅的嫁衣襯著肌膚如雪衩匣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天粥航,我揣著相機與錄音琅捏,去河邊找鬼。 笑死递雀,一個胖子當著我的面吹牛柄延,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搜吧,長吁一口氣:“原來是場噩夢啊……” “哼市俊!你這毒婦竟也來了?” 一聲冷哼從身側響起滤奈,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤摆昧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜒程,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绅你,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年昭躺,在試婚紗的時候發(fā)現(xiàn)自己被綠了忌锯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡领炫,死狀恐怖偶垮,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情帝洪,我是刑警寧澤似舵,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站葱峡,受9級特大地震影響啄枕,放射性物質發(fā)生泄漏。R本人自食惡果不足惜族沃,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一频祝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脆淹,春花似錦常空、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至烘嘱,卻和暖如春昆禽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝇庭。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工醉鳖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哮内。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓盗棵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纹因,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355