對於各進位之間的轉換有什麼好方法嗎?
也就是二進位、八進位、十進位、十六進位之間的轉換,書本上的覺得好麻煩啊(沒那麼聰明).......(不考試我學它幹嘛!!!紙筆考 非機考))
@vczh
如果只是2、4、8、16的話,你只要列印出一張表就行了,就是16進位的16個數字分別對英語2、4、8的什麼東西。
謝邀. 主要是國慶到來,神清氣爽,比較閑~
其實這個知識並不難,自己稍加總結就可以解決.
但本著讓懶人更懶,然後永遠傻下去的邪惡目的,我幫你整理了一份,哈哈.另外, 無論是用python perl等腳本還是windows 自帶的計算器都很方便檢驗你的計算是否正確, 話說剛看到windows下自帶的計算器竟然還有程序員模式, 深感太孤陋寡聞了,所以隨便自己做了一個demo模擬整數的進位轉換(Qt做的),如下:雖說丑爆了,但畢竟是親生的,怎麼看怎麼順眼..#include&
#include&
2的k進位數。可以處理包括負進位的任意進位,自己寫的,不謝。
8421 你懂得
我教人的辦法是統一用2進位中轉。
2進位轉16進位,從末尾隔四位打逗號,最前面不足四位補0,然後把0000-1111轉化成對應的0-F。轉8進位就是隔三位打逗號,然後把000-111轉化成0-7。
16進位轉2進位就是逆操作,逐位把0-F轉換成0000-1111。8進位逐位轉為000-111。
2進位轉10進位,從末尾開始逐個在2進位每位數字下寫1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192……(最好背下來這幾個,後面不夠用再臨時算)。這樣就變成了上面一行2進位,下面一行2的冪。然後看上面是1的,把下面加起來就行了。
10進位轉2進位,也要用到上面那兩行,先看這個10進位的數在上面第二行的哪兩個數之間,比如5398,在4096和8192之間,那就在4096的那位寫1,然後用5398減4096得到1302,用1302再和2048比,比之小,在2048這位寫0,然後繼續和1024比…總之就是從高位往低位比大小,大的寫1同時做減法,小的直接寫0。其實理論上也是逆操作,把它拆成2的冪的和的表達式,有的寫1沒的寫0。
其他轉化的話,先中轉成2進位然後轉成你想要的,這樣看起來貌似多了一步其實速度也不慢,因為2進位和16/8進位之間轉化很快。而且因為是兩步,如果第一步沒問題第二步錯了,從中間來就好。整個過程只有加減法,比什麼除幾取余簡單多了。Python 解決,簡單易懂
q = True
while q:
num = input("請輸入一個整數(輸入Q結束程序):")
if num != "Q":
num = int(num)
print("十進位 -&> 十六進位 : %d -&> 0x%x" % (num, num))
print("十進位 -&> 八進位 : %d -&> 0o%o" % (num, num))
print("十進位 -&> 二進位 : %d -&> " % num, bin(num))
else:q = False
運行結果
請輸入一個整數(輸入Q結束程序):78
十進位 -&> 十六進位 : 78 -&> 0x4e
十進位 -&> 八進位 : 78 -&> 0o116
十進位 -&> 二進位 : 78 -&> 0b1001110
請輸入一個整數(輸入Q結束程序):26
十進位 -&> 十六進位 : 26 -&> 0x1a
十進位 -&> 八進位 : 26 -&> 0o32
十進位 -&> 二進位 : 26 -&> 0b11010
請輸入一個整數(輸入Q結束程序):
用不到學它幹嘛,哪裡用到的話,多看看看時間長了,眼熟就好了
理解很容易 眼熟就好了嘛 這能有什麼好方法
如果你學網路什麼的,子網劃分,不定長的掩碼用多了,對不同規模的網路用不同的掩碼,慢慢就對一些數字有感覺了。linux下許可權的掩碼也一樣。
如果你用ps,或者網頁中用設置顏色,rgb裡面每個通道0-255的顏色也是八位通道色啊。自己看看#000000到#FFFFFF不同顏色和不同深淺就對16進位有感覺了,還能順便學下色光是如何混合的。
要是你編程裡面用,位運算用一下看看效果,對於8位、16位、32位的變數存儲範圍有個有個了解,拿計算器算明白為什麼這樣就可以啦。
最後,我覺得對於數值,二進位和16進位用得最多,需要最有感覺,其他的知道存在就可以了。
對於感覺,0-255的數字要非常有感覺,再大的數對於臨界值有感覺就可以了,防止溢出神馬噠。就醬紫溫逗絲自帶的計算器就有程序員模式!!!!
說一下最常用的10進位轉2進位吧,註:此方法適合較小數字的換算,但心算速度較快
首先你需要記住一些的2的N次方(玩過2048吧?就是那些數字)
例如:2,4,6,8,16,32.......2048,4096,8192等等
比如需要得到10000的2進位是多少
首先找到小於10000並且最接近10000的數,8192
用10000 / 8192=1 (1808)(之後用1808除4096)
1808 / 4096=0 (1808) 1808 / 2048=0 (1808) 1808 / 1024=1 (784) 784 / 512=1 (272) 272 / 256=1 (16) 16 / 128=0 (16)16 / 64=0 (16)
16 / 32=0 (16) 16 / 16=1 (0) 0 / 8=0 (16) 0 / 4=0 (16) 0 / 2=0 (16) 0 / 2=0 (16)結果為:10011100010000按下 F121.按下「F12」,調出控制台
2. parseInt("0xad",16).toString(2)
怎麼玩都行···先轉成2進位,2進位轉成幾進位值都容易。
《編碼的奧秘》抓一隻海豚,一隻龍蝦,一隻米老鼠來數。Charles Petzold老師教我的。
不藉助程序的話,首先2^0, 2^12記熟吧。然後建議去學下單片機八位流水燈和數碼管編碼幫助理解。如果你是單純的懶,無解。
這個回答給 OS X 用戶的。
---
不過都完機靈還是要多說兩句的。一般情況下要求計算的數字不大是可以湊出來的,不過你要對幾個二進位整數比較熟悉,比如:
1,2,4,8,16,32,64,128,256,512,1024,2048,4096……然後記住它們對應的是2的幾次方,然後挨個減。例如:345轉2進位,找最接近它而且小於它的,
345-256=89, 2^8*1, 89-128&<0, 2^7*0,89-64=25, 2^6*1, 25-32&<0, 2^5*0,25-16=9, 2^4*1,9-8=1, 2^3*1,1-4&<0, 2^2*0,1-2&<0, 2^1*0,
1, 2^0*1所以345=101011001
然後二進位轉換8和16就簡單的多。。。時間不夠去上課了。。推薦閱讀:
※UUID是如何保證唯一性的?
※程序員能20分鐘徒手寫出一個沒bug的快速排序嗎?(可以調試)
※如何在最短的時間內搞定數據結構和演算法,應付面試?
※如果按國家分,哪個國家編程最厲害?有沒有代表人物?