十進制的0.1 為什么不能用二進制很好的表示?


     二進制表示法。。。。

    這是也是基礎知識啦:

   別急我們一點一點的講解。正整數轉二進制,負整數轉二進制,小數轉二進制


 

  正整數轉二進制:  正整數轉成二進制。要點一定一定要記住哈:除二取余,然后倒序排列,高位補零。

            21 /2    -------------------------------余  1

            10/2     -------------------------------余   0

             5/2      ------------------------------- 余   1

             2/2      --------------------------------余  0

              1/2     ---------------------------------余 1

      記住,到着排序  10101  ,驗證下轉成十進制: 1×2的4次方+1×2的2次方+1×2的0次方=16+4+1=21。正確。

      計算機一般是8 位 16位  32位  64 位的,所以不夠位高位補零。8位表示法:00010101


負整數轉二進制:先是將對應的正整數轉換成二進制后,對二進制取反,然后對結果再加一。

     取 -21 演示,看口訣,

         21 的二進制表示為: 10101

        取反:  01010

        加一 : 01011


  小數轉換為二進制的方法:對小數點以后的數乘以2,有一個結果吧,取結果的整數部分(不是1就是0嘍),然后再用小數部分再乘以2,再取結果的整數部分……以此類推,直到小數部分為0或者位數已經夠了就OK了。

     演示: 0.125 ×2=0.25 .......................0

                 0.25×2=0.5.............................0

                 0.5×2=1.0................................1

   即 0.125的二進制表示為小數部分為0.001

     記住,乘到小數為0。排序:正序。

驗證: 0.001        0×2的0次方+0×2的-1次方+0×2的-2次方+0×2的-3次方=1/8=0.125.正確。

   現在來說明0.1轉二進制不能表示的原因啦:

  0.1×2=0.2 .....................0

 0.2×2=0.4 ......................0

 0.4×2=0.8 .....................0

 0.8×2=1.6.......................1

 0.6×2=1.2.......................1

 0.2×2=0.4.......................0

 .....

 是無限循環的。所以。。。。你懂的!


 


 

  for(double i=0;i!=10;i+=0.1)
{
}

有可能是死循環。用浮點數循環需要注意啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM