聽說優酷前端面試有問進制數轉換的,甚至是負正整數轉換為二進制,那就索性一次整個明白~
原文來自:http://jingyan.baidu.com/article/597a0643614568312b5243c0.html
十進制轉成二進制主要有以下3種:
正整數轉二進制、負整數轉二進制、小數轉二進制
1、 正整數轉成二進制。
口訣:除二取余,倒序排列,高位補零。
舉個栗子:42轉化為二進制(本來打算自己畫張圖的,太麻煩,直接粘百度到的圖吧~)
42 除以2得到的余數(右邊)為010101,然后倒着排一下就是取到的二進制了(如下圖)
計算機內部表示數的字節單位是定長的,如8位,16位,或32位。所以,位數不夠時,高位補零,所說,如圖3所示,42轉換成二進制以后就是。00101010,也即規范的寫法為(42)10=(00101010)2
2、 負正整數轉成二進制。
先是將對應的正整數轉換成二進制后,對二進制取反,然后對結果再加一。還以42為例,負整數就是-42,如圖4所示為方法解釋。最后即為:(-42)10=(11010110)2.
2、 小數轉成二進制。
對小數點以后的數乘以2,有一個結果吧,取結果的整數部分(不是1就是0嘍),然后再用小數部分再乘以2,再取結果的整數部分……以此類推,直到小數部分為0或者位數已經夠了就OK了。然后把取的整數部分按先后次序排列就OK了,就構成了二進制小數部分的序列,舉個例子吧,比如0.125,如圖5所示。
如果小數的整數部分有大於0的整數時該如何轉換呢?如以上整數轉換成二進制,小數轉換成二進制,然后加在一起就OK了,如圖6所示。
二進制轉成十進制:
首先將二進制數補齊位數,首位如果是0就代表是正整數,如果首位是1則代表是負整數。
先看首位是0的正整數,補齊位數以后,將二進制中的位數分別將下邊對應的值相乘,然后相加得到的就為十進制,比如1010轉換為十進制,方法如圖7所示。
若二進制補足位數后首位為1時,就需要先取反再換算:例如,11101011,首位為1,那么就先取反吧:-00010100,然后算一下10100對應的十進制為20,所以對應的十進制為-20,方法如圖8所示。