正負整數和小數轉二進制


  1.  轉成二進制主要有以下幾種:正整數轉二進制,負整數轉二進制,小數轉二進制;

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

            也就是說,將正的十進制數除以二,得到的商再除以二,依次類推知道商為零或一時為止,然后在旁邊標出各步的余數,最后倒着寫出來,高位補零就OK咧。哎呀,還是舉例說明吧,比如42轉換為二進制,如圖1所示操作。

  2.  

            42除以2得到的余數分別為010101,然后咱們倒着排一下,42所對應二進制就是101010.如圖2所示更直觀的表達。

  3.  

            計算機內部表示數的字節單位是定長的,如8位,16位,或32位。所以,位數不夠時,高位補零,所說,如圖3所示,42轉換成二進制以后就是。00101010,也即規范的寫法為(42)10=(00101010)2.趕緊記住吧。

  4.  

    2、  負整數轉換成二進制

            方法:先是將對應的正整數轉換成二進制后,對二進制取反,然后對結果再加一。還以42為例,負整數就是-42,如圖4所示為方法解釋。最后即為:(-42)10=(11010110)2.

  5.  

    3、  小數轉換為二進制的方法:對小數點以后的數乘以2,有一個結果吧,取結果的整數部分(不是1就是0嘍),然后再用小數部分再乘以2,再取結果的整數部分……以此類推,直到小數部分為0或者位數已經夠了就OK了。然后把取的整數部分按先后次序排列就OK了,就構成了二進制小數部分的序列,舉個例子吧,比如0.125,如圖5所示。

  6.  

            如果小數的整數部分有大於0的整數時該如何轉換呢?如以上整數轉換成二進制,小數轉換成二進制,然后加在一起就OK了,如圖6所示。

  7.  

    4、  整數二進制轉換為十進制:首先將二進制數補齊位數,首位如果是0就代表是正整數,如果首位是1則代表是負整數。

            先看首位是0的正整數,補齊位數以后,將二進制中的位數分別將下邊對應的值相乘,然后相加得到的就為十進制,比如1010轉換為十進制,方法如圖7所示。

  8.  

    5、若二進制補足位數后首位為1時,就需要先取反再換算:例如,11101011,首位為1,那么就先取反吧:-00010100,然后算一下10100對應的十進制為20,所以對應的十進制為-20,方法如圖8所示。

  9.  

    6、將有小數的二進制轉換為十進制時:例如0.1101轉換為十進制的方法:將二進制中的四位數分別於下邊(如圖9所示)對應的值相乘后相加得到的值即為換算后的十進制。

    END
為什么要用反碼和補碼?
先看正碼表示,設N=4, -1 = 1001; -2 = 1010, -1 > -2, 但是 1001 < 1010,兩種映射的編碼的序性不一致
反碼呢,-1=1110, -2 = 1101,  Ok,序性正確了,
然而,這里有一個問題,就是正數與負數之間,有一個1的縫隙。-1=1110, 1=0001,從循環編碼的角度,這兩個編碼相差3:1110->1111->0000->0001。
因為正零和負零是兩個數,導致兩個數系的斷裂。怎么辦?讓負數整體往正數靠攏,邁進一步(+1),負1沒有了。
這就是求補的過程了。反碼再加1。
 
我想,當初寫出計算機的編碼設計論文的大牛(好像是圖靈還是什么的),當然有更深的考慮。但從序性和數系聯系的角度,補碼的發明是相當合理的。而這種合理性,我個人認為,正是其優點。
 
從機器實現的角度,並不算復雜,但相對反碼的機器實現,還是多了+1的進位延時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM