首先,給出乙個任意實數,整數部分用普通的二進位制便可以表示,這裡只說小數部分如何表示
例如0.6
文字描述該過程如下:將該數字乘以2,取出整數部分作為二進位制表示的第1位;然後再將小數部分乘以2,將得到的整數部分作為二進位制表示的第2位;以此類推,知道小數部分為0。下面我們具體計算一下0.6的小數表示過程特殊情況:小數部分出現迴圈,無法停止,則用有限的二進位制位無法準確表示乙個小數,這也是在程式語言中表示小數會出現誤差的原因
0.6 * 2 = 1.2 ——————- 1我們可以發現在該計算中已經出現了迴圈,0.6用二進位制表示為 1001 1001 1001 1001 ……0.2 * 2 = 0.4 ——————- 0
0.4 * 2 = 0.8 ——————- 0
0.8 * 2 = 1.6 ——————- 1
0.6 * 2 = 1.2 ——————- 1
…………
如果是10.6,那個10.6的完整二進位制表示為 1010.100110011001……
其實這個問題很簡單,我們再拿0.6的二進位制表示舉例:1001 1001 1001 1001
文字描述:從左到右,v[i] * 2^( - i ), i 為從左到右的index,v[i]為該位的值,直接看例子,很直接的
0.6 = 1 * 2^-1 + 0 * 2^-2 + 0 * 2^-3 + 1 * 2^-4 + ……
二進位制小數
要理解這道題,首先要知道什麼樣的小數可以轉化為二進位制形式,怎樣的小數不能被轉化為二進位制形式,自己測試幾組資料發現 1.可以轉化為二進位制的小數在有限次的乘二之後,小數部分會變零。舉個例子 0.625 2 1.25 1.25 2 2.5 2.5 2 5.0 5.0的小數部分變成了 0 2.不能轉化...
二進位制小數
題目描述 有乙個介於0和1之間的實數,型別為double,返回它的二進位制表示。如果該數字無法精確地用32位以內的二進位制表示,返回 error 給定乙個double num,表示0到1的實數,請返回乙個string,代表該數的二進位制表示或者 error 測試樣例 0.625 返回 0.101 c...
十進位制小數轉為二進位制小數
整數和小數分別轉換.整數除以2,商繼續除以2,得到0為止,將餘數逆序排列.22 2 11 餘 0 11 2 5 餘 1 5 2 2 餘 1 2 2 1 餘 0 1 2 0 餘 1 所以22的二進位制是10110 小數乘以2,取整,小數部分繼續乘以2,取整,得到小數部分0為止,將整數順序排列.0.81...