在學校的時候,教科書上教過如何求得一個數的二進制如何表示,但是求解過程有啰嗦又麻煩。
我用我自己的方法,這個方法比較笨,但是夠簡單。
十進制整數如何轉化為二進制數
算法很簡單。
舉個例子,11表示成二進制數:
11/2=5 余 1
5/2=2 余 1
2/2=1 余 0
1/2=0 余 1
得0結束
11的二進制表示為(從下往上):1011
這里提一點:只要遇到除以后的結果為0了就結束了,大家想一想,所有的整數除以2是不是一定能夠最終得到0。換句話說,所有的整數轉變為二進制數的算法會不會無限循環下去呢?絕對不會,整數永遠可以用二進制精確表示 ,但小數就不一定了。
十進制小數如何轉化為二進制數
算法是乘以2直到沒有了小數為止。
舉個例子,0.9表示成二進制數
0.9*2=1.8 取整數部分 1
0.8(1.8的小數部分)*2=1.6 取整數部分 1
0.6*2=1.2 取整數部分 1
0.2*2=0.4 取整數部分 0
0.4*2=0.8 取整數部分 0
0.8*2=1.6 取整數部分 1
0.6*2=1.2 取整數部分 0
......... 0.9二進制表示為(從上往下): 1100100100100......
注意:上面的計算過程循環了,也就是說*2永遠不可能消滅小數部分,這樣算法將無限下去。很顯然,小數的二進制表示有時是不可能精確的 。其實道理很簡單,十進制系統中能不能准確表示出1/3呢?同樣二進制系統也無法准確表示1/10。這也就解釋了為什么浮點型減法出現了"減不盡"的精度丟失問題。