十進位制和二進位制的小數轉換

2021-10-04 07:11:14 字數 1020 閱讀 3932

例如:0.101 -->1*1/(2^1)+0*1/(2^2)+1*1/(2^3)=1*0.5+0*0.25+1*0.125=0.625

即二進位制轉十進位制是每一位乘以  ... 2^n,2^(n-1),...,2^1,2^0,2^(-1),2^(-2),...

由於二進位制轉十進位制時:整數部分是乘以2,小數部分是除以2,那麼反過來我們同樣分兩部分處理,並進行和之前相反的操作。

及整數部分不斷除以2,而小數部分不斷乘以2。

顯然第一次乘以2如果能得到乙個1,那麼在以2^(-1)為基數的位置上是1.我們用乙個式子來解釋

a=a0*0.5+a1*0.25+a2*0.125+... (a是十進位制表示,右邊是二進位制表示式,由於是二進位制,顯然a0,a1,a2,...等只能取0或1)

我們將這個式子乘以2,變成2*a= a0+(a1*0.5+a2*0.25+...),分析一下這個式子,此時a0等於2*a小數點左邊的數,要麼為0,要麼為1.

現在,我們兩邊同時減去a0,即將整數部分去掉,接著再次乘以2,可以繼續分離出a1,接下來就是同樣的步驟了。

可能我描述的還不夠清晰,我們舉個例子,5.71這個數,我們很容易知道整數部分的二進位制是101,接下來我們計算0.71的二進位制。

0.71*2=1.42  即 a0=1

0.42*2=0.84 即 a1=0

0.84*2=1.68 即 a2=1

0.68*2=1.36 即 a3=1

繼續算下去我們可以得到乙個0.1011...的二進位制數,但是顯然我們無法計算出完整的二進位制值,因為0.71不論乘以多少次2都還會有小數部分,只有部分小數才可以在有限次的計算後得到精確的二進位制數。

例如0.75

0.75*2=1.5 a0=1

0.5*2=1.0 a1=1

0.75(十進位制)=0.11(二進位制)

這就解釋了浮點數的精度丟失問題,小數儲存在計算機中後很大可能會出現數值上的偏差,有時會帶來一些意想不到的影響。

浮點數在計算機中儲存形式:數符 指數 尾數

以上為本人對小數的一些理解總結,如有不當之處望指正。

十進位制二進位制轉換

一 整形裝換成兩個位元組 int value 456 unsigned char byte1 value 0xff00 8 高8位 unsigned char byte2 value 0xff 低8位 nslog byte1 x byte2 x byte1,byte2 byte1 1 byte2 c...

十進位制二進位制轉換

1.十進位制轉二進位制 正整數轉二進位制 除二取餘,然後倒序排列,高位補零 負整數轉二進位制 先是將對應的正整數轉換成二進位制後,對二進位製取反,然後對結果再加一。小數轉換二進位制 對小數點以後的數乘以2,取結果的整數部分 不是1就是0嘍 然後再用小數部分再乘以2,再取結果的整數部分 以此類推,直到...

十進位制二進位制轉換

二進位制轉十進位制 二進位制的1101轉化成十進位制 1101 2 1 2o 0 21 1 22 1 23 1 0 4 8 13 轉化成十進位制要從右到左用二進位制的每個數去乘以2的相應次方 不過次方要從0開始 相反 用十進位制的數除以2 每除一下將餘數就記在旁邊 最後按餘數從下向上排列就可得到11...