1. 程式人生 > >十進制的0.1 為什麽不能用二進制很好的表示?

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

現在 需要 我們 。。 進制 表示法 32位 取余 小數點

二進制表示法。。。。

這是也是基礎知識啦:

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


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

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)
{
}

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

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