二進制、十進制、十六進制的轉換


1.二進制

二進制只有0和1,我認為對於新手來說,一定要把這里0和1當做是一種符號來記憶,而不是當做數字。

下面先給個簡略的對應表

表一

十進制

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

二進制

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
十六進制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

       還記得當年學單片機的時候老師講過進制的轉換的方法,有一個比較快的方法,就是記住對應位上的“權”就行了

       比如:二進制(4位)對應的位權是8 4 2 1,就是說這個位置如果有數,那就是代表有多大。現在我們來算一個7的二進制,顯然,第一位不能是1,如果是就超過了(8>7),第二位就應該有,所以是1(4<7),距離7還差,那繼續,第三位也得有,現在總共是6,還差1,那第四位也得有,如此得到二進制位0111;當然了,這里是為了方便表示用的4位,如果想實現更大的數的轉換也可以用這個方法,比如44的二進制應該是多少,很顯然,這次我們需要更多的位數來表示才行,那我們先列出一排0(8個),這次第一位到最后一位的位權顯然就不同了,不過也很好推出來,在先前,你肯定發現了前一位總是后一位位權的2倍,那么我們就能知道位權8前面的應該是16...以此類推。這里顯然128,64>44,32<44,那么前兩位都應該是0,第三位應該是1,這時候,由於位數上來了,我們有必要拿出一些快速判斷的能力出來了,32+16>44,所以第4位應該是0...如此往復,我們很容易得到44的二進制表示應該為0010 1100。關於二進制轉換為十進制就很簡單了,只需要記住位權,一路做加法便好。

表二
二進制 1 1 1 1 1 1 1 1
 位權 128 64 32 16 8 4 2 1

 

       那么二進制和十六進制的轉換捏?這里先記住一件事情,4位二進制對應一位十六進制數。如表一所示。

       如同二級制和十進制的轉換一般,記住位權的對應關系就好,這里稍微補充說明下十六進制的表示方式,因為十六進制中是包括了0~9,所以當出現821等用十進制數字表示的十六進制數時,便會難以區分,那么就有必要添加符號以區分開來,一般是在十六進制前加上“0x”(是數字0哦)來表示是十六進制數,如果沒有,那一般認為是十進制數。

       這里依舊舉個簡單的例子,0x14的二進制是多少?

       顯然這是一個十六進制數(廢話),因為前面有“0x”;接着對於二進制的第一位來說很明顯得有因為8<14,接着又是同樣的步驟,很快就能得到應該是1110。

       另外,如果十六進制數大於15的話(或者說是不在0-15之間),那么應當注意到4位二進制數可能不足以表示這個十六進制數。那么當你遇到比較大的數進制轉換時,關於二進制到十六進制,還有必要補充另一件事情,比如說,當你遇到下面一串二進制數時:0010010101110101110 

       如果你是個新手,那么你可能會有一些疑惑的地方,比如我這里說4位二進制數對應一位十六進制數,那么是從從左到右划分4位,還是從右到左划分呢?

0010 0101 0111 0101 110 (從左到右划分4位)        001 0010 1011 1010 1110 (從右到左划分4位)

       很明顯,這里兩種划分得出的結果肯定是不一樣的。這里你記住一定從右划分,不足位補為0,比如上面的二進制數划分出來應該是:0001 0010 1011 1010 1110(從右到左划分4位,不足位已補為0)

 

       關於十進制與十六進制的轉換,我個人認為最快的方法是先把十進制or十六進制換成二進制,再進行之前的步驟。

 

       最后,親愛的讀者,如果你足夠細心和好奇,你可能會發現這里並沒有提到負數的進制轉換。因為它和無符號數的進制轉換不大一樣,要理解那個,你得了解原碼,反碼以及補碼之間的轉換關系。(關於那個,等一等,想起來再更。)

 


免責聲明!

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



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