
文章插圖
電子計算機只能存儲0和1,人類世界所能認(rèn)識的任何數(shù)據(jù)都需要通過轉(zhuǎn)換為二進(jìn)制再進(jìn)行存儲 。整數(shù)(int)型轉(zhuǎn)換為二進(jìn)制存儲很好理解,那么float型數(shù)據(jù)計算機又是怎么存儲的呢?常說的浮點型數(shù)據(jù)精度丟失和數(shù)據(jù)溢出又是怎么回事呢?
浮點數(shù)示意圖
位和字節(jié)位:來自英文bit,音譯為“比特”,表示二進(jìn)制位 。位是計算機內(nèi)部數(shù)據(jù)儲存的最小單位,11010100是一個8位二進(jìn)制數(shù) 。
字節(jié):來自英文Byte,音譯為“拜特”,習(xí)慣上用大寫的“B”表示 。字節(jié)是計算機中數(shù)據(jù)處理的基本單位 。計算機中以字節(jié)為單位存儲和解釋信息,規(guī)定一個字節(jié)由八個二進(jìn)制位構(gòu)成,即1個字節(jié)等于8個比特(1Byte=8bit) 。八位二進(jìn)制數(shù)最小為00000000,最大為11111111;通常1個字節(jié)可以存入一個ASCII碼,2個字節(jié)可以存放一個漢字國標(biāo)碼 。
int型數(shù)據(jù)存儲int型數(shù)據(jù)根據(jù)平臺類型不同,所占用字節(jié)大小也不同,這里就按正常的4個字節(jié)來講 。整型分有符號和無符號,有符號左邊最高位為符號位 。
unsigned int和signed in按四個字節(jié)計算,也就是4*8=32位 。int默認(rèn)是signed有符號位的 。所以,unsigned int表示的范圍是:0~2的32次方-1 。signed int表示的范圍是:-2的31次方~2的31次方-1 。
例如+3,轉(zhuǎn)為二進(jìn)制是0000 0011,但是計算機是按補碼存儲整型數(shù)據(jù)的,正數(shù)的補碼就是其本身,但是負(fù)數(shù)的補碼就不是了 。這里不作細(xì)講,有興趣的朋友可以翻看我前面的文章,里面有詳細(xì)介紹 。
整形數(shù)據(jù)存儲方式
float型數(shù)據(jù)存儲浮點數(shù)轉(zhuǎn)二進(jìn)制方法十進(jìn)制小數(shù)轉(zhuǎn)換成二進(jìn)制小數(shù)采用”乘2取整,按序取出”法 。
整數(shù)部分按整數(shù)方式轉(zhuǎn),用短除法,小數(shù)部分按如下方式,最后再用小數(shù)點合起來;
具體做法是:用2乘十進(jìn)制小數(shù),可以得到積,將積的整數(shù)部分取出,再用2乘余下的小數(shù)部分,又得到一個積,再將積的整數(shù)部分取出,如此進(jìn)行,直到積中的小數(shù)部分為零,或者達(dá)到所要求的精度為止 。然后把取出的整數(shù)部分按順序排列起來,先取的整數(shù)作為二進(jìn)制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位 。
例:0.734375轉(zhuǎn)二進(jìn)制,結(jié)果是0.101111 。
0.734375 x 2 = 1.46875
0.46875 x 2 = 0.9375
0.9375 x 2 = 1.875
0.875 x 2 = 1.75
0.75 x 2 = 1.5
0.5 x 2 = 1.0
IEEE二進(jìn)制浮點數(shù)算術(shù)標(biāo)準(zhǔn)浮點數(shù)的存儲方式與整型數(shù)據(jù)不同 。浮點數(shù)運算有自己的標(biāo)準(zhǔn)標(biāo)準(zhǔn),也稱IEEE二進(jìn)制浮點數(shù)算術(shù)標(biāo)準(zhǔn)(IEEE 754),是20世紀(jì)80年代以來最廣泛使用的浮點數(shù)運算標(biāo)準(zhǔn),為許多CPU與浮點運算器所采用 。
根據(jù)國際標(biāo)準(zhǔn)IEEE(電氣和電子工程協(xié)會)規(guī)定,任何一個浮點數(shù)NUM的二進(jìn)制數(shù)可以寫為:NUM = (-1) ^ S * M * 2 ^ E;//(S表示符號,E表示階乘,M表示有效數(shù)字)
這個標(biāo)準(zhǔn)是什么意思呢?其實說白了就是二進(jìn)制的科學(xué)計數(shù)法:
十進(jìn)制:12345678 = 1.2345678*10^7 ;
二進(jìn)制:例如十進(jìn)制11.0,寫成二進(jìn)制就是1011.0,用IEEE標(biāo)準(zhǔn)表示就是(-1)^0 × 1.011 × 2^3 ,s=0,M=1.011,E=3;
浮點數(shù)存儲浮點數(shù)在內(nèi)存中的存儲按下圖所示方式存儲:
1、對于S,用來表示符號,0為正,1為負(fù)
2、對于M:規(guī)定M在存儲時舍去第一個1,只存儲小數(shù)點之后的數(shù)字 。這樣做節(jié)省了空間,以float類型為例,就可以保存23位小數(shù)信息,加上舍去的1就可以用23位來表示24個有效的信息 。
3、對于E(指數(shù))E是一個字節(jié)(8位)整數(shù)所以E的取值范圍為(0~ 255),但是在計數(shù)中指數(shù)是可以為負(fù)的,所以規(guī)定在存入E時,在它原本的值上加上中間數(shù)(127),在使用時減去中間數(shù)(127),這樣E的真正取值范圍就成了(-127~128) 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 網(wǎng)絡(luò)語言縮寫真的好嗎? yyds什么意思是什么梗
- 什么是網(wǎng)絡(luò)語言?
- 如何確認(rèn)伴侶愛的語言
- 漢語言文學(xué)”專業(yè)有啥用?如果你還在猶豫,不妨進(jìn)來看看
- 語言暴力的形成原因有哪些
- 現(xiàn)代流行語言
- 嵐語是什么語言 嵐語是什么意思
- 網(wǎng)絡(luò)語言 來歷
- 語言暴力屬于冷暴力嗎
- 冷暴力與語言暴力有哪些區(qū)別
