在網(wǎng)絡(luò)中,經(jīng)常會(huì)用到16進(jìn)制數(shù)字的就算,而大部分的情況是轉(zhuǎn)換為10進(jìn)制數(shù)字.在這里給出快速計(jì)算的方法,讓你快速的進(jìn)行進(jìn)制轉(zhuǎn)換
比如設(shè)置背景顏色,怎么快速的知道 #66ccff 轉(zhuǎn)換 為 rgb(xx,xx,xx) ?是多少呢,當(dāng)然你可以使用計(jì)算器計(jì)算,不過(guò)如果可以直接口算出來(lái)的話就方便多了.
下面直接寫(xiě)結(jié)論,詳細(xì)結(jié)論看這一段在知乎找的文章:
16進(jìn)制 -> 10進(jìn)制 十位數(shù)字X16 個(gè)位數(shù)字X1 ,百位數(shù)字X16的二次方,以此類(lèi)推!一般情況只就算兩位
10進(jìn)制 -> 16進(jìn)制 十位數(shù)字/16 各位數(shù)字/1 ...
然后我們就可以很容易的計(jì)算出 #66ccff = rgb(102,204,255) 了
詳細(xì)文章:
一十進(jìn)制就是逢十進(jìn)一(0,1,2,3,4,5,6,7,8,9,后面就要進(jìn)位才能表示了)
十六進(jìn)制就是逢十六進(jìn)一(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,后面就要進(jìn)位才能表示了)
所謂進(jìn)制就是單個(gè)數(shù)不能表示時(shí)要用二位數(shù)及二位數(shù)以上的數(shù)表示的處理辦法.其實(shí)可以任意進(jìn)制,只是要用起來(lái)方便罷了,比如時(shí)間就是60進(jìn)制,紀(jì)年中的世紀(jì)是一百進(jìn)度,圓的一周用度數(shù)表示時(shí)是360進(jìn)制.
十進(jìn)制: 34 就是 3 * 10^1 + 4 * 10^0
而在十六進(jìn)制中: 34就是 3 * 16^1 + 4 * 16^0 (轉(zhuǎn)換成十進(jìn)制只需乘出
結(jié)果就行了,得52,即十六進(jìn)制中的34為十進(jìn)制中的52)
十進(jìn)制化為十六進(jìn)制就是除16的辦法: 34除以16,得2余2,即為22,即十進(jìn)制中的34
這十六進(jìn)制中的22
(即:十六進(jìn)制化成十進(jìn)制是乘16,十進(jìn)制化成十六進(jìn)制是除16)
事實(shí)上,k(k是正整數(shù))進(jìn)制數(shù)逢k進(jìn)一這么個(gè)意義逸爵,一個(gè)十進(jìn)制數(shù)可寫(xiě)成
a(n)*10^n+...+a(1)*10+a(0)+a(-1)*10^(-1)+... (a(i)表示0—9中的某個(gè)數(shù))
同樣具滴,k進(jìn)制數(shù)有形式:
b(n)*k^n+...+b(1)*k+b(0)+b(-1)*k^(-1)+... (b(i)表示0—(k-1)中的某個(gè)數(shù))
當(dāng)一個(gè)k進(jìn)制數(shù)要轉(zhuǎn)化為十進(jìn)制數(shù)時(shí),用上式直接計(jì)算即可师倔;而當(dāng)十進(jìn)制數(shù)要轉(zhuǎn)化為k進(jìn)制數(shù)時(shí)构韵,則對(duì)其整數(shù)部分除k取余,對(duì)其小數(shù)部分則乘k取整,此過(guò)程下以十進(jìn)制轉(zhuǎn)化十六進(jìn)制為例舉一例:
十進(jìn)制數(shù)1673.59375
1673/16=104...9 , 104/16=6...8 , 6/16=0...6;
0.59375*16=9.5 (取9), 0.5*16=8.0 (取8).
所以十進(jìn)制數(shù)1673.59375轉(zhuǎn)化為十六進(jìn)制數(shù)后為: 986.98
二數(shù)的進(jìn)制和進(jìn)制轉(zhuǎn)換
考慮一個(gè)10進(jìn)制數(shù)123疲恢,數(shù)字1凶朗、2、3在這個(gè)數(shù)中的重要性是不一樣的显拳,3代表的是100的3倍棚愤,2代表101的2倍,而1代表的則是102的1倍杂数。數(shù)學(xué)上把100宛畦,101和102稱為對(duì)應(yīng)數(shù)位上的權(quán)重(簡(jiǎn)稱權(quán)),分別表示了對(duì)應(yīng)位上的數(shù)字對(duì)整個(gè)數(shù)值的“貢獻(xiàn)”揍移。對(duì)于10進(jìn)制數(shù)來(lái)說(shuō)次和,各位權(quán)從小到大分別是100、101那伐、102……斯够,都是10的各次冪。對(duì)于各位上的數(shù)字喧锦,我們稱為某權(quán)的系數(shù),簡(jiǎn)稱系數(shù)抓督。
其他進(jìn)制數(shù)也存在同樣的問(wèn)題燃少,例如2進(jìn)制數(shù)各位權(quán)重分別是2的各次冪,8進(jìn)制數(shù)是8的各次冪等等铃在。
需要說(shuō)明的是阵具,各種進(jìn)制數(shù)都是人們?yōu)榱死斫鈹?shù)而進(jìn)行的一種表述,在計(jì)算機(jī)計(jì)算過(guò)程中定铜,是不存在進(jìn)制這種概念的阳液,對(duì)于C語(yǔ)言表示數(shù)的三種形式:0x12(16進(jìn)制)、18(10進(jìn)制)和022(8進(jìn)制)揣炕,在內(nèi)存中都是一樣的帘皿。
如果已經(jīng)知道一個(gè)數(shù)k,在某種進(jìn)制w條件下畸陡,計(jì)算各位的系數(shù)一般采用除余法鹰溜,基本算法如下:
首先估計(jì)這個(gè)數(shù)的最大位數(shù)N
n = N,divisor = wn-1
b(n) = k / divisor, k = k % divisor,divisor = divisor /w,n --
如果n ==0算法結(jié)束 ,否則轉(zhuǎn)3
例如對(duì)于C語(yǔ)言中的unsigned char 類(lèi)型丁恭,最大可能為3位8進(jìn)制數(shù)曹动,如果已經(jīng)知道一個(gè)數(shù)n=252,計(jì)算8進(jìn)制的過(guò)程如下:
N =3
n = N,divisor = 8n-1 = 64
b(3) = 252 / 64 = 3, k = k % 64 =60,divisor = divisor /8 = 8,n -- = 2
b(2) = 60/8 = 7,k = k %8 =4,divisor = 8/8 =1,n = 1
b(1) = k / 1= 4 ,k=k %1 =0,divisor = 1/8,n = 0
n == 0算法結(jié)束
計(jì)算結(jié)果252就是8進(jìn)制數(shù)0374
如果不按照上面的冪次方式規(guī)定各位數(shù)的權(quán)牲览,也可以定義一些特殊的進(jìn)制數(shù)墓陈。例如,我們按照從小到大順序分別規(guī)定各位的權(quán)重分別為w(n),n=1,2,3....贡必,(注意兔港,必須滿足w(n) | w(m),n<= m,也就是低位權(quán)必須能整除高位權(quán))已知一個(gè)數(shù)計(jì)算各位系數(shù)也一樣可以采用修正后的除余法赊级。修正后的除余法為:
首先估計(jì)這個(gè)數(shù)的最大位數(shù)N
n = N,divisor = w(n)
b(n) = k / divisor, k = k % divisor,n--,divisor = w(n)
如果n ==0算法結(jié)束 押框,否則轉(zhuǎn)3
可見(jiàn),當(dāng)w(n) = bn時(shí)理逊,這個(gè)修正的除余法就和開(kāi)始的除余法等價(jià)了
如果需要在不同進(jìn)制間轉(zhuǎn)換橡伞,最簡(jiǎn)單的方法是先把一種不容易進(jìn)行四則運(yùn)算的進(jìn)制轉(zhuǎn)換成容易進(jìn)行四則運(yùn)算的10進(jìn)制,然后利用除余法轉(zhuǎn)換成給定的進(jìn)制晋被。例如對(duì)于022兑徘,很容易利用權(quán)的定義計(jì)算出他的10進(jìn)制形式為2 * 81 + 2 * 80 = 18,轉(zhuǎn)換成16進(jìn)制利用除余法可以得到為0x12羡洛。