詳解IEEE 754標準(浮點數的二進位制表示)

2021-10-10 03:18:23 字數 1959 閱讀 1447

浮點數是我們在程式裡常用的資料型別,它在記憶體中到底是怎麼樣的形式存在,是我了解之前是覺得好神奇,以此記錄,作為學習筆記。

現代計算機中,一般都以ieee 754標準儲存浮點數,這個標準的在記憶體中儲存的形式為:

對於不同長度的浮點數,階碼與小數字分配的數量不一樣,如下:

對於32位的單精度浮點數,數符分配是1位,階碼分配了8位,尾數分配了是23位。

根據這個標準,我們來嘗試把乙個十進位制的浮點數轉換為ieee754標準表示。

例如:178.125

先把浮點數分別把整數部分和小數部分轉換成2進製

整數部分用除2取餘的方法,求得:10110010

小數部分用乘2取整的方法,求得:001

合起來即是:10110010.001

轉換成二進位制的浮點數,即把小數點移動到整數字只有1,即為:1.0110010001 * 2^111,111是二進位制,由於左移了7位,所以是111,階數即為111。

把浮點數轉換二進位制後,這裡基本已經可以得出對應3部分的值了

數符:由於浮點數是整數,故為0.(負數為1)

階碼 : 階碼的計算公式:階數 + 偏移量。階碼是需要作移碼運算,在轉換出來的二進位制數里,階數是111(十進位制為7),對於單精度的浮點數,偏移值為01111111(127)[偏移量的計算是:2^(e-1)-1, e為階碼的位數,即為8,因此偏移值是127],即:111+01111111 = 10000110

尾數:小數點後面的數,即0110010001

最終根據位置填到對位的位置上:

可能有個疑問:小數點前面的1去**了?由於尾數部分是規格化表示的,最高位總是「1」,所以這是直接隱藏掉,同時也節省了1個位出來儲存小數,提高精度

浮點數是我們在程式裡常用的資料型別,它在記憶體中到底是怎麼樣的形式存在,是我了解之前是覺得好神奇,以此記錄,作為學習筆記。

現代計算機中,一般都以ieee 754標準儲存浮點數,這個標準的在記憶體中儲存的形式為:

對於不同長度的浮點數,階碼與小數字分配的數量不一樣,如下:

對於32位的單精度浮點數,數符分配是1位,階碼分配了8位,尾數分配了是23位。

根據這個標準,我們來嘗試把乙個十進位制的浮點數轉換為ieee754標準表示。

例如:178.125

先把浮點數分別把整數部分和小數部分轉換成2進製

整數部分用除2取餘的方法,求得:10110010

小數部分用乘2取整的方法,求得:001

合起來即是:10110010.001

轉換成二進位制的浮點數,即把小數點移動到整數字只有1,即為:1.0110010001 * 2^111,111是二進位制,由於左移了7位,所以是111,階數即為111。

把浮點數轉換二進位制後,這裡基本已經可以得出對應3部分的值了

數符:由於浮點數是整數,故為0.(負數為1)

階碼 : 階碼的計算公式:階數 + 偏移量。階碼是需要作移碼運算,在轉換出來的二進位制數里,階數是111(十進位制為7),對於單精度的浮點數,偏移值為01111111(127)[偏移量的計算是:2^(e-1)-1, e為階碼的位數,即為8,因此偏移值是127],即:111+01111111 = 10000110

尾數:小數點後面的數,即0110010001

最終根據位置填到對位的位置上:

可能有個疑問:小數點前面的1去**了?由於尾數部分是規格化表示的,最高位總是「1」,所以這是直接隱藏掉,同時也節省了1個位出來儲存小數,提高精度

IEEE754標準浮點數的轉換

對於乙個十進位制的的數字,當我們需要轉化為浮點數時需要按照一定的規則,而ieee754是現在應用比較廣泛的一種標準,下面是關於該標準的一些轉化規則。浮點數表示的格式 單精度 總位數 32位 符號位 1 階碼位即指數字 8 尾數字 23 指數偏移量 127 雙精度 總位數 64位 符號位 1 階碼位即...

浮點數表示(IEEE 754標準浮點格式)

浮點數的一般表示形式為 乙個十進位制數 可以寫成 n 10e m 乙個二進位制數 可以寫成 n 2e m其中,m稱為浮點數的尾數,是乙個純小數 e是比例因子的指數,稱為浮點數的指數,是乙個整數。在計算機中表示乙個浮點數時,一是要給出尾數m,用小數形式表示 二是要給出指數e,用整數形式表示,常稱為階碼...

單精度浮點數(IEEE754)

單精度浮點數佔據4個位元組,4個位元組的分配如下 a 第一位為符號位,0表示正,1表示負 b 第2 9位為階碼,採用移碼表示 c 第10 32位為尾數,採用原碼表示。1 給定32位串,如何轉換成十進位制數 假設記憶體中存在32位串 cd cc 08 41。因為intel cpu採用little en...