不同进制之间的转化
將二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換為十進(jìn)制
二進(jìn)制、八進(jìn)制和十六進(jìn)制向十進(jìn)制轉(zhuǎn)換都非常容易,就是“按權(quán)相加”。所謂“權(quán)”,也即“位權(quán)”。
假設(shè)當(dāng)前數(shù)字是 N 進(jìn)制,那么:
對于整數(shù)部分,從右往左看,第 i 位的位權(quán)等于Ni-1對于小數(shù)部分,恰好相反,要從左往右看,第 j 位的位權(quán)為N-j。通俗的理解,假設(shè)一個(gè)多位數(shù)(由多個(gè)數(shù)字組成的數(shù))某位上的數(shù)字是 1,那么它所表示的數(shù)值大小就是該位的位權(quán)。
1整數(shù)部分
將八進(jìn)制數(shù)字 53627 轉(zhuǎn)換成十進(jìn)制:
從右往左看,第1位的位權(quán)為 8的0次方=1,第2位的位權(quán)為 8的1次方=8,第3位的位權(quán)為 8的2次方=64,第4位的位權(quán)為 8的3次方=512,第5位的位權(quán)為 8的4次方=4096 …… 第n位的位權(quán)就為 8的n-1次方。將各個(gè)位的數(shù)字乘以位權(quán),然后再相加,就得到了十進(jìn)制形式。
注意,這里我們需要以十進(jìn)制形式來表示位權(quán)。
將十六進(jìn)制數(shù)字 9FA8C 轉(zhuǎn)換成十進(jìn)制:
9FA8C = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十進(jìn)制)從右往左看,第1位的位權(quán)為 16的0次方=1,第2位的位權(quán)為 16的1次方=16,第3位的位權(quán)為 16的2次方=256,第4位的位權(quán)為 16的3次方=4096,第5位的位權(quán)為 16的4次方=65536 …… 第n位的位權(quán)就為 16的n-1次方。將各個(gè)位的數(shù)字乘以位權(quán),然后再相加,就得到了十進(jìn)制形式。
將二進(jìn)制數(shù)字轉(zhuǎn)換成十進(jìn)制也是類似的道理:
11010 = 1×24 + 1×23 + 0×22 + 1×21 + 0×20 = 26(十進(jìn)制)從右往左看,第1位的位權(quán)為 2的0次方=1,第2位的位權(quán)為 2的1次方=2,第3位的位權(quán)為 2的2次方=4,第4位的位權(quán)為 2的3次方=8,第5位的位權(quán)為 2的4次方=16 …… 第n位的位權(quán)就為 2的n-1次方。將各個(gè)位的數(shù)字乘以位權(quán),然后再相加,就得到了十進(jìn)制形式。
2 小數(shù)部分
將八進(jìn)制數(shù)字 423.5176 轉(zhuǎn)換成十進(jìn)制:
小數(shù)部分和整數(shù)部分相反,要從左往右看,第1位的位權(quán)為 8的-1次方=1/8,第2位的位權(quán)為 8的-2次方=1/64,第3位的位權(quán)為 8的-3次方=1/512,第4位的位權(quán)為 8的-4次方=1/4096 …… 第m位的位權(quán)就為 8的-m次方。
將二進(jìn)制數(shù)字 1010.1101 轉(zhuǎn)換成十進(jìn)制:
1010.1101 = 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + 1×2-2 + 0×2-3 + 1×2-4 = 10.8125(十進(jìn)制)小數(shù)部分和整數(shù)部分相反,要從左往右看,第1位的位權(quán)為 2的-1次方=1/2,第2位的位權(quán)為 2的-2次方=1/4,第3位的位權(quán)為 2的-3次方=1/8,第4位的位權(quán)為 2的-4次方=1/16 …… 第m位的位權(quán)就為 2的-m次方。
更多轉(zhuǎn)換成十進(jìn)制的例子:
二進(jìn)制:1001 = 1×23 + 0×22 + 0×21 + 1×20 = 8 + 0 + 0 + 1 = 9(十進(jìn)制) 二進(jìn)制:101.1001 = 1×22 + 0×21 + 1×20 + 1×2-1 + 0×2-2 + 0×2-3 + 1×2-4 = 4 + 0 + 1 + 0.5 + 0 + 0 + 0.0625 = 5.5625(十進(jìn)制) 八進(jìn)制:302 = 3×82 + 0×81 + 2×80 = 192 + 0 + 2 = 194(十進(jìn)制) 八進(jìn)制:302.46 = 3×82 + 0×81 + 2×80 + 4×8-1 + 6×8-2 = 192 + 0 + 2 + 0.5 + 0.09375= 194.59375(十進(jìn)制) 十六進(jìn)制:EA7 = 14×162 + 10×161 + 7×160 = 3751(十進(jìn)制)將十進(jìn)制轉(zhuǎn)換為二進(jìn)制、八進(jìn)制、十六進(jìn)制
將十進(jìn)制轉(zhuǎn)換為其它進(jìn)制時(shí)比較復(fù)雜,整數(shù)部分和小數(shù)部分的算法不一樣,下面跟隨我一起來看看吧。
1 整數(shù)部分
十進(jìn)制整數(shù)轉(zhuǎn)換為 N 進(jìn)制整數(shù)采用“除 N 取余,逆序排列”法。具體做法是:
……
如此反復(fù)進(jìn)行,每次都保留余數(shù),用商接著除以 N,直到商為 0 時(shí)為止。
把先得到的余數(shù)作為 N 進(jìn)制數(shù)的低位數(shù)字,后得到的余數(shù)作為 N 進(jìn)制數(shù)的高位數(shù)字,依次排列起來,就得到了 N 進(jìn)制數(shù)字。
將十進(jìn)制數(shù)字 36926 轉(zhuǎn)換成八進(jìn)制
從上圖中得知,十進(jìn)制數(shù)字 36926 轉(zhuǎn)換成八進(jìn)制的結(jié)果為 110076。
將十進(jìn)制數(shù)字 42 轉(zhuǎn)換成二進(jìn)制
從上圖中得知,十進(jìn)制數(shù)字 42 轉(zhuǎn)換成二進(jìn)制的結(jié)果為 101010。
2 小數(shù)部分
十進(jìn)制小數(shù)轉(zhuǎn)換成 N 進(jìn)制小數(shù)采用“乘 N 取整,順序排列”法。具體做法是:
……
如此反復(fù)進(jìn)行,每次都取出整數(shù)部分,用 N 接著乘以小數(shù)部分,直到積中的小數(shù)部分為 0,或者達(dá)到所要求的精度為止。把取出的整數(shù)部分按順序排列起來,先取出的整數(shù)作為 N 進(jìn)制小數(shù)的高位數(shù)字,后取出的整數(shù)作為低位數(shù)字,這樣就得到了 N 進(jìn)制小數(shù)。
將十進(jìn)制小數(shù) 0.930908203125 轉(zhuǎn)換成八進(jìn)制小數(shù)
從上圖中得知,十進(jìn)制小數(shù) 0.930908203125 轉(zhuǎn)換成八進(jìn)制小數(shù)的結(jié)果為 0.7345。
將十進(jìn)制小數(shù) 0.6875 轉(zhuǎn)換成二進(jìn)制小數(shù)
從上圖中得知,十進(jìn)制小數(shù) 0.6875 轉(zhuǎn)換成二進(jìn)制小數(shù)的結(jié)果為 0.1011。
如果一個(gè)數(shù)字既包含了整數(shù)部分又包含了小數(shù)部分,那么將整數(shù)部分和小數(shù)部分開,分別按照上面的方法完成轉(zhuǎn)換,然后再合并在一起即可。
十進(jìn)制數(shù)字 36926.930908203125 轉(zhuǎn)換成八進(jìn)制的結(jié)果為 110076.7345;十進(jìn)制數(shù)字 42.6875 轉(zhuǎn)換成二進(jìn)制的結(jié)果為 101010.1011。下表列出了前 17 個(gè)十進(jìn)制整數(shù)與二進(jìn)制、八進(jìn)制、十六進(jìn)制的對應(yīng)關(guān)系:
注意,十進(jìn)制小數(shù)轉(zhuǎn)換成其他進(jìn)制小數(shù)時(shí),結(jié)果有可能是一個(gè)無限位的小數(shù)。
示例如下
二進(jìn)制和八進(jìn)制、十六進(jìn)制的轉(zhuǎn)換
其實(shí),任何進(jìn)制之間的轉(zhuǎn)換都可以使用上面講到的方法,只不過有時(shí)比較麻煩,所以一般針對不同的進(jìn)制采取不同的方法。將二進(jìn)制轉(zhuǎn)換為八進(jìn)制和十六進(jìn)制時(shí)就有非常簡潔的方法,反之亦然。
1 二進(jìn)制整數(shù)和八進(jìn)制整數(shù)之間的轉(zhuǎn)換
二進(jìn)制整數(shù)轉(zhuǎn)換為八進(jìn)制整數(shù)時(shí),每三位二進(jìn)制數(shù)字轉(zhuǎn)換為一位八進(jìn)制數(shù)字,運(yùn)算的順序是從低位向高位依次進(jìn)行,高位不足三位用零補(bǔ)齊。將二進(jìn)制整數(shù) 1110111100 轉(zhuǎn)換為八進(jìn)制
從圖中可以看出,二進(jìn)制整數(shù) 1110111100 轉(zhuǎn)換為八進(jìn)制的結(jié)果為 1674。
八進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)時(shí),思路是相反的,每一位八進(jìn)制數(shù)字轉(zhuǎn)換為三位二進(jìn)制數(shù)字,運(yùn)算的順序也是從低位向高位依次進(jìn)行。將八進(jìn)制整數(shù) 2743 轉(zhuǎn)換為二進(jìn)制
從圖中可以看出,八進(jìn)制整數(shù) 2743 轉(zhuǎn)換為二進(jìn)制的結(jié)果為 10111100011。
2二進(jìn)制整數(shù)和十六進(jìn)制整數(shù)之間的轉(zhuǎn)換
二進(jìn)制整數(shù)轉(zhuǎn)換為十六進(jìn)制整數(shù)時(shí),每四位二進(jìn)制數(shù)字轉(zhuǎn)換為一位十六進(jìn)制數(shù)字,運(yùn)算的順序是從低位向高位依次進(jìn)行,高位不足四位用零補(bǔ)齊。將二進(jìn)制整數(shù) 10 1101 0101 1100 轉(zhuǎn)換為十六進(jìn)制
從圖中可以看出,二進(jìn)制整數(shù) 10 1101 0101 1100 轉(zhuǎn)換為十六進(jìn)制的結(jié)果為 2D5C。
十六進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制整數(shù)時(shí),思路是相反的,每一位十六進(jìn)制數(shù)字轉(zhuǎn)換為四位二進(jìn)制數(shù)字,運(yùn)算的順序也是從低位向高位依次進(jìn)行。將十六進(jìn)制整數(shù) A5D6 轉(zhuǎn)換為二進(jìn)制
從圖中可以看出,十六進(jìn)制整數(shù) A5D6 轉(zhuǎn)換為二進(jìn)制的結(jié)果為 1010 0101 1101 0110。
如果感覺不錯(cuò)的話記得點(diǎn)贊喲!!!
總結(jié)
- 上一篇: C++函数编译原理和成员函数的实现
- 下一篇: 使用Predicate操作Collect