如何用二进制表示一个小数
二進位的小數表示法
小數
二進位的小數和十進位的小數在觀念上完全一樣,必須有一個小數點, 小數點的左邊是整數, 小數點的右邊是小數,每一位數有它的權重,例如下圖:在電腦裡表達小數的方式有兩種,一種是定點表示法,一種是浮點表示法。
定點小數表示法:(fixed point)
在電腦裡資料以位元來存放,而小數點並不需要真的存放在位元內,我們只要知道哪兩個位元之間是小數點就好了,或是說我們只要知道每一個位元的權重,例如上圖即可。浮點小數表示法:
所謂二進位的浮點小數表示法 (或是浮點數, floating point number) 簡單地講和我們十進位中常用的科學記號表示法是類似的,十進位中我們用十的冪次 (power) 及 0 至 1 之間的小數來表示一個任意的實數,例如:12345.6789 表示為 0.123456789 * 10^5。在二進位中我們一樣可以將一個二進位數字 1101110.11011 表示為 0.110111011011 * 2^7,這樣子的表示法和定點表示法之間好像沒有什麼不同嘛!! 對!! 這兩個數值的大小當然是完全一樣的,那為什麼要用浮點表示法呢?? 請注意在定點小數表示法之中我們看到它的缺點是絕對值太大的數字會被截斷 (正確的名稱是溢位,overflow) 位數不夠多無法表達大於範圍的數字, 絕對值太小的數 (例如:0.000000001) 也會被截斷 (正確的名稱是無條件捨去,truncation) 只能表達近似的值。
如果是這樣子的話,不知道你有沒有想過...
這時浮點數表示法就有它的妙用了,以第一例中一個很大的數字而言:浮點數由最重要的位數開始只保留一定的位數,例如 123456789012.00000011 可用 .1234567890 * 10^12 來表示就夠了,這個表達方法所記錄的數字和實際的數字會有誤差,但是百分比誤差不大。以第二例而言: 0.0000000012 可用 0.12 * 10^(-8) 來表示,不需要浪費許多位元記錄 "0",只需記 12 以及 -8 即可精確地表達這個很小的數字。
舉例來說,一種簡單的二進位浮點表示法可以一個位元記錄正負號,七個位元二的補數記錄 2 的冪次, 24 個位元記錄小數,共 32 位元,如下圖:
若有一個以此種表示方法的二進位數值:
- 0 0001110 110000000000000000000000
注意:
- 和前面的定點小數表示法一樣,浮點小數表示法在表達任意一個小數的時候,也常常會有一些誤差,而且實際所表示的數字的絕對值會小於或是等於原來希望表達的那個數字的絕對值。
總結
以上是生活随笔為你收集整理的如何用二进制表示一个小数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件体系架构:RM-ODP参考模型简介
- 下一篇: EXECUTE IMMEDIATE用法小