日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...

發(fā)布時間:2024/9/27 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

整數(shù)的表示和運算我們已經(jīng)講完了,在實際應(yīng)用中,整數(shù)能夠解決我們大部分問題。但是某些需要精確表示的數(shù),比如某件商品的價格,某兩地之間的距離等等,我們?nèi)绻谜麛?shù)表示將會有很大的出入,這時候浮點數(shù)就產(chǎn)生了。

在 20世紀80年代以前,每個計算機廠商都設(shè)計了自己表示浮點數(shù)的規(guī)則,以及對浮點數(shù)執(zhí)行運算的細節(jié),這對于應(yīng)用程序在不同機器上的移植造成了巨大的困難。而在這之后,也就是 1985年左右,IEEE 標準產(chǎn)生了,這是一個仔細制定的表示浮點數(shù)及其運算的標準,現(xiàn)在的計算機浮點數(shù)也都是采用這個標準。

浮點數(shù)不僅僅是為了讓數(shù)值的表示更加精確,也是為了表示一些整數(shù)無法達到的數(shù)字,比如一些接近于0的數(shù)字,或者一些非常大的數(shù)值。因此浮點數(shù)對于計算機的意義是非常大的。

1、二進制小數(shù)

前面這篇博客 進制間的轉(zhuǎn)換 我們已經(jīng)講過了各個進制數(shù)的表示。現(xiàn)在我們復(fù)習(xí)一下:

進位計數(shù)制的要素:

①、數(shù)碼:用來表示進制數(shù)的元素。比如二進制數(shù)的數(shù)碼為:0,1。十進制數(shù)的數(shù)碼為:0,1,2,3,4,5,6,7,8,9。十六進制數(shù)的數(shù)碼為:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

②、基數(shù):數(shù)碼的個數(shù)。比如二進制數(shù)的基數(shù)為2。十進制數(shù)的基數(shù)為10。十六進制數(shù)的基數(shù)為 16.

③、位權(quán):數(shù)制中每一固定位置對應(yīng)的單位值稱為位權(quán)。例如十進制第2位的位權(quán)為101即10,第3位的位權(quán)為102即100;而二進制第1位的位權(quán)為20即1,第3位的位權(quán)為4,對于 N進制數(shù),整數(shù)部分第 i位的位權(quán)為N(i-1),而小數(shù)部分第j位的位權(quán)為N-j。

那么我們可以說:每個數(shù)碼所表示的數(shù)值=該數(shù)碼值 * 所處位置的位權(quán)。

比如十進制數(shù):(123.45)10=1×102+2×101+3×100+4×10-1+5×10-2

二進制數(shù):(1010)2 =l× 23+0 × 22+l× 21+0 × 20=(10)10

十六進制數(shù):(BAD)16 =11× 162+10×161+13×160=(2989)10

二進制小數(shù)(10010.1110)2 = 1 * 24 + 0 * 23 + 0 * 22 + 1 * 21 + 0 * 20 + 1 * 2-1 + 1 * 2-2 + 1 * 2-3 + 0 * 2-4 = 16 + 2 + 1/2 + 1/4 + 1/8

總結(jié)來說

十進制表示公式:

對于一個形式為bm....b0.b-1....b-n的二進制小數(shù)b來說,二進制表示公式:

從上面的二進制公式我們可以看出,小數(shù)點向左移動一位,則相當于 (∑ 2i * bi)/2。因為每一位的位權(quán)都*2-1;反過來,小數(shù)點向右移動一位,則相當于該數(shù)乘以2。

注意:二進制小數(shù)不像整數(shù)一樣,只要位數(shù)足夠,它就可以表示所有整數(shù)。假設(shè)我們僅考慮有限長度的編碼,那么二進制小數(shù)無法精確的表示任意小數(shù),比如十進制小數(shù)0.2,我們并不能將其準確的表示為一個二進制數(shù),只能增加二進制長度提高表示的精度。

2、IEEE 浮點表示

IEEE,電氣和電子工程師協(xié)會( 全稱是Institute of Electrical and Electronics Engineers)是一個國際性的電子技術(shù)與信息科學(xué)工程師的協(xié)會,是目前全球最大的非營利性專業(yè)技術(shù)學(xué)會,IEEE 754 標準是IEEE二進位浮點數(shù)算術(shù)標準(IEEE Standard for Floating-Point Arithmetic)的標準編號。

IEEE 浮點標準表示: V = (-1)s * M * 2E。

①、s 是符號位,為0時表示正,為1時表示負。

②、M為尾數(shù),是一個二進制小數(shù),它的范圍是0至1-ε,或者1至2-ε(ε的值一般是2-k次方,其中設(shè)k > 0)

③、E為階碼,可正可負,作用是給尾數(shù)加權(quán)。

我們將浮點數(shù)的位劃分為三個階段,分別對這些值進行編碼。

一、一個單獨的符號位 s 直接編碼符號 s

二、k 位的階碼字段 exp =ek-1ek-2...e1e0 編碼階碼E

三、n 位小數(shù)字段 frac = fn-1fn-2...f1f0 編碼尾數(shù) M,但是編碼出來的值也依賴于階碼字段的值是否等于0.

一般來說,現(xiàn)在的編譯器都支持兩種浮點格式,一種是單精度,一種是雙精度。單雙精度分別對應(yīng)于編程語言當中的float和double類型。其中float是單精度的,采用32位二進制表示,其中1位符號位,8位階碼以及23位尾數(shù)。double是雙精度的,采用64位二進制表示,其中1位符號位,11位階碼以及52位尾數(shù)。如下圖表示:

如果給定了位 s 的表示,根據(jù) exp 的值,被編碼的值可以分為三種不同的情況(最后一種情況有兩個變種)。下圖是單精度的情況:

下面我們分別講解這三種情況(規(guī)格化、非規(guī)格化、特殊值)

3、規(guī)格化

階碼E 的位模式exp既不全為0(數(shù)值0),也不全為1(單精度8位1,數(shù)值為255,雙精度11位,數(shù)值為2047)。

這種情況下,階碼字段被解釋為以偏置形式表示的有符號整數(shù)。”偏置”的含義就是在原有的值的基礎(chǔ)上加上一個偏移量,對于階碼位數(shù)為k的情況來說,偏移量Bias = 2k-1-1。假設(shè)e是階碼的無符號數(shù)值,那么真實的階碼E = e - Bias。

單精度階碼位數(shù)為8,則Bias = 127。由于8位階碼下的規(guī)格化的浮點數(shù)的階碼范圍是1至254,因此真實階碼的范圍則為-126至127。

對于小數(shù)字段 frac = fn-1fn-2...f1f0 它的值 0<= f < 1。那么我們可以表示為0. fn-1fn-2...f1f0,也就是二進制小數(shù)點在最高有效位的左邊。當計算浮點數(shù)數(shù)值的時候,會在尾數(shù)值的基礎(chǔ)上加1,也就是真實的尾數(shù)M = 1 + f。因此我們可以把 M 看成一個二進制表達式為 1.fn-1fn-2...f1f0的數(shù)字。相當于我們省掉了1位二進制,形成了浮點數(shù)表示的約定,默認尾數(shù)的值還有一個最高位的1。

4、非規(guī)格化的值

當階碼域為全 0 的時候,所表示的數(shù)就是非規(guī)格化形式。

按照上面規(guī)格化的階碼求值方式來說,非規(guī)格化的階碼值應(yīng)該固定在-Bias這個值上面。不過這里有一個小技巧,我們設(shè)定階碼的值E = 1 - Bias。這樣做是為了能夠平滑的從非規(guī)格化的浮點數(shù)過渡到規(guī)格化的浮點數(shù),有關(guān)這一點后面我們再詳細看。

對于尾數(shù)的解釋,非規(guī)格化的方式與規(guī)格化不同,它不會對尾數(shù)進行加1的處理,也就是說,真實的尾數(shù)M = f。這是為了能夠表示0這個數(shù)值,否則的話尾數(shù)總是大于1,那么無論如何都將得不到0這個數(shù)值。

非規(guī)格化的浮點數(shù)除了可以表示0以外,它還有一個作用,就是可以表示接近于0的數(shù)值。另外,在浮點數(shù)當中,0的表示有兩種,一種是位表示全部為0,則為+0.0。還有一種則是符號位為1,其余全為0,此時為-0.0。

5、特殊值

特殊值是指階碼全為 1 的時候出現(xiàn)的。

在階碼全為1時,如果尾數(shù)位全為0,則表示無窮大。符號位為0則表示正無窮大,相反則表示負無窮大。倘若尾數(shù)位不全為0時,此時則表示NaN,表示不是一個數(shù)字。一些運算的結(jié)果不能是實數(shù)或者無窮,就會返回NaN值,比如正無窮減正無窮,-1的根號值。在某些應(yīng)用中表示未初始化的值,也很有用處。這一點在Javascript當中有一個函數(shù)isNaN()與這個NaN的含義有點類似,它的作用是用來判斷一個參數(shù)或者表達式是否是一個數(shù)字。

6、數(shù)值范圍

注意:由于浮點數(shù)在正負的區(qū)間內(nèi)是一一對應(yīng)的,因此我們將忽略符號位對取值范圍的影響,我們只討論符號位為0的情況。

非規(guī)格化

①、最小的正非規(guī)格化值的位表示,是由最低有效位為 1 而其他所有位為 0 構(gòu)成。它具有小數(shù)(尾數(shù))值 M=f=2-n 和階碼值 E= -2k-1 +2。因此它的數(shù)字值是 V= 2-n * 22 - 2k-1 = 2-n+2 - 2k-1。

②、最大的非規(guī)格化值,全為0的階碼字段和全為1的小數(shù)字段組成。此時的小數(shù)(尾數(shù))值 M=f=1-2-n,階碼 E= -2k-1 +2,因此此時的值為 (1 - 2-n) * 22 - 2k-1。

規(guī)格化

①、最小的正規(guī)格化值,階碼字段的最低有效位為1,其它位為0,。它的尾數(shù)值 M = 1。階碼值 E= -2k-1 +2。因此數(shù)值 V = 22 - 2k-1

②、最大的規(guī)格化值,符號位為0,階碼最低有效位等于0,其它位等于 1,尾數(shù)為n個1。它的小數(shù)值 f=1-2-n,尾數(shù) M= 2 - 2-n,此時的值為(2 - 2-n) * 2-1 + 2k-1,也可以化簡一下為(1 - 2-n-1) * 22k-1。

下面我們看一下非負浮點數(shù)單雙精度取值范圍:

7、總結(jié)

本篇博客介紹的 IEEE 浮點標準算是難度系數(shù)很高的一節(jié)了,需要花很多時間去理解。下篇博客浮點數(shù)據(jù)類型的舍入以及運算。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。