作為一名嵌入式底層驅動開發人員,或者是單片機的固件編程人員,掌握一些二進位的基本知識是很必要的。
首先,我們在看處理器的參考手冊時,看到最多的就是有關寄存器的介紹。我們開發驅動程序,本質上也是設置或讀取這些寄存器。參考手冊介紹寄存器時一般都是以比特位為單位介紹的。涉及到比特位當然以二進位表示最為自然。其次,我們在編寫或閱讀底層代碼時,如果涉及到寄存器的配置或是有關比特位的操作也是離不開二進位的影子。
那就來介紹下一些比較常用的的有關二進位的東西。
二進位的表示方法。比如我們要給一個char型變量a賦值一個二進位數100。如果我們寫成a=100,那麼a就是100。大俠別誤會我說的一百;沒錯就是十進位的100。如果要把二進位的100賦給a,需要這樣寫:a=0b100,。那麼如果我實在不知道這個二進位的賦值方法,也沒關係。我們可以寫成a=4。這就涉及到下個知識點二進位和十進位的轉換。
二進位轉十進位。比如我們有個二進位數0b10001001。我們先從右往左數(最右邊的位為第0位),發現共有3個1,分別是第0位、第3位、第7位。那麼計算方法就出來了:0b10001001 = 2^7+2^3+2^0 =128+8+1= 137。
十進位轉二進位時個人推薦靠近法。比如有個十進位數138,要轉成二進位數。第一步,要看2的幾次方能最靠近138又不大於138,經過大腦一陣折騰知道了2的7次方為128最靠近138,這樣我們就知道了這個二進位數的最左邊的1在第7位。第二步,138減去2的7次方(128)還剩下10,那我們看看2的幾次方最靠近這個10又不大於10,顯然2的3次方(8)滿足這個條件,這樣我們就知道了這個二進位數的第3位也是個1。第三步,10減去2的3次方(8)還剩下2,那就好辦了2的1次方就是2,所以這個二進位數的第1位也是個1。經過一陣折騰,我們知道了這個二進位數有3個1,分別在第7位,第三位和第1位。這樣我們就得到了這個二進位數0b10001010。
其實,最後我想說,我們可以用計算器進行二進位和十進位之間的轉換。但是如果我們對轉換比較熟悉的話,工作效率會更快一些。