修改一下答案:十進位制轉二進位制,其實就是把用10^x表示的數換成2^y表示,整數部分因為2的0次方是1,所以總可以表示成整數,小數部分就像是A/D轉換器,先跟2的-1次方比(0.5),大於0.5,第一位記為1,然後減去0.5,剩下的部分再跟0.25比較,後面依次0.125、0.0625。。。不湊巧的話是比不完的。本質上還是a×10^(-1)+b×10^(-2)...=x×2^(-1)+y×2^(-2)....
十進位制轉二進位制,小數點前的數是除2求餘,結果絕對是整數。小數點後面是乘2求整,這個就有點蛋疼了。比如0.18乘2等於0.36,這時候意味著小數點後第一位為0,二進位制記為0.0;繼續乘2,等於0.72,記為0.00;還沒到整,接著乘2,等於1.44,出現大於1的數,把這個數減1,記為0.001;剩下0.44,繼續乘2,0.88,記為0.0010;接著乘2,1.76,大於1的數,減1,記為0.00101,剩下的0.76乘2,1.52,大於1,減1,此時二進位制小數為0.001011了,精確到小數點後5位就是0.00101了。除了很少的十進位制小數轉換為2進位制位數有限,大多數的十進位制小數轉換成2進位制位數是無限多的,只能求有限精度的位數。至於計算機怎麼精確處理十進位制小數,那就是另外的問題了。
修改一下答案:十進位制轉二進位制,其實就是把用10^x表示的數換成2^y表示,整數部分因為2的0次方是1,所以總可以表示成整數,小數部分就像是A/D轉換器,先跟2的-1次方比(0.5),大於0.5,第一位記為1,然後減去0.5,剩下的部分再跟0.25比較,後面依次0.125、0.0625。。。不湊巧的話是比不完的。本質上還是a×10^(-1)+b×10^(-2)...=x×2^(-1)+y×2^(-2)....
十進位制轉二進位制,小數點前的數是除2求餘,結果絕對是整數。小數點後面是乘2求整,這個就有點蛋疼了。比如0.18乘2等於0.36,這時候意味著小數點後第一位為0,二進位制記為0.0;繼續乘2,等於0.72,記為0.00;還沒到整,接著乘2,等於1.44,出現大於1的數,把這個數減1,記為0.001;剩下0.44,繼續乘2,0.88,記為0.0010;接著乘2,1.76,大於1的數,減1,記為0.00101,剩下的0.76乘2,1.52,大於1,減1,此時二進位制小數為0.001011了,精確到小數點後5位就是0.00101了。除了很少的十進位制小數轉換為2進位制位數有限,大多數的十進位制小數轉換成2進位制位數是無限多的,只能求有限精度的位數。至於計算機怎麼精確處理十進位制小數,那就是另外的問題了。