例如: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...