编程基础知识(变简单的进制转换)
編程基礎(chǔ)——進(jìn)制轉(zhuǎn)換
前言
? ?世界上有10種人,懂二進(jìn)制的和不懂二進(jìn)制的。
? ?有同學(xué)會(huì)問(wèn),你說(shuō)世界上有10種人,為啥只說(shuō)了兩個(gè)呢。這里的10可不一定是自然數(shù)十,也可能是二進(jìn)制的一和零,不懂的同學(xué)看完這篇文章保證你明明白白(不明白你來(lái)打我)。
? ?
一、什么是進(jìn)制
? ?進(jìn)制就是進(jìn)位制,是人們規(guī)定的一種進(jìn)位方法。比如X進(jìn)制,就是每逢X就進(jìn)一位。二進(jìn)制是逢二進(jìn)一,八進(jìn)制是逢八進(jìn)一,十進(jìn)制是逢十進(jìn)一,十六進(jìn)制是逢十六進(jìn)一。一個(gè)數(shù)值可以在不同的進(jìn)制之間轉(zhuǎn)換,就是我們接下來(lái)要講的進(jìn)制轉(zhuǎn)換。
? ?
二、二進(jìn)制轉(zhuǎn)十進(jìn)制
1.按權(quán)相加法
? ?將二進(jìn)制每一位上的數(shù)乘以權(quán),然后加起來(lái)的和就是十進(jìn)制。
? ?
? ?權(quán):假設(shè)X進(jìn)制,整數(shù)部分的第i位的權(quán)是Xi?1X^{i-1}Xi?1,小數(shù)部分第i位權(quán)為X?iX^{-i}X?i.
? ?
? ?將二進(jìn)制101.01轉(zhuǎn)換為十進(jìn)制,示例如下:
? ?
? ?1?22+0?21+1?20+0?2?1+1?2?2=5.251*2^2+0*2^1+1*2^0+0*2^{-1}+1*2^{-2}=5.251?22+0?21+1?20+0?2?1+1?2?2=5.25
? ?
? ?因?yàn)?乘任何數(shù)都為零,所以我們可以簡(jiǎn)化一下:
? ?
? ?1?22+1?20+1?2?2=5.251*2^2+1*2^0+1*2^{-2}=5.251?22+1?20+1?2?2=5.25
? ?
2.口算法
? ?如果你嫌上面的算法太繁瑣,可以練習(xí)口算,我個(gè)人比較喜歡的一種方法,適合日常計(jì)算一些簡(jiǎn)短的二進(jìn)制(常用于計(jì)算IP地址)。你仔細(xì)觀察的話會(huì)發(fā)現(xiàn)上面的公式是有規(guī)律的:將二進(jìn)制位上的數(shù)乘以權(quán)i,結(jié)果是000或是2i2^i2i,這有就像在玩2048游戲。
2048 1024 512 256 128 64 32 16 8 4 2 1? ?把上面的數(shù)背過(guò),有能力的話可以背更多,然后對(duì)照起來(lái)就可以用簡(jiǎn)單的加法轉(zhuǎn)換二進(jìn)制。
? ?
? ?舉個(gè)栗子:
? ?將二進(jìn)制1對(duì)應(yīng)位置的數(shù)相加,0對(duì)應(yīng)的數(shù)忽略,結(jié)果為
? ?
? ?128+64+0+16+0+4+0+1=213128+64+0+16+0+4+0+1=213128+64+0+16+0+4+0+1=213
? ?
三、十進(jìn)制轉(zhuǎn)二進(jìn)制
? ?十進(jìn)制轉(zhuǎn)換二進(jìn)制時(shí),整數(shù)與小數(shù)部分轉(zhuǎn)換方法不同,我們可以分開(kāi)轉(zhuǎn)換,最后再合并一起。
1.整數(shù)部分—除二取余法
? ?將整數(shù)部分除以2,取余數(shù),商繼續(xù)除2,直到商為0為止,最終余數(shù)倒著寫(xiě)出來(lái)就是轉(zhuǎn)換完成的二進(jìn)制數(shù)。
? ?
? ?比如將十進(jìn)制數(shù)10,轉(zhuǎn)換為二進(jìn)制數(shù):
? ?將余數(shù)從后到前列出來(lái),就是10的二進(jìn)制數(shù):1010
? ?
2.小數(shù)部分—乘二取整法
? ?將小數(shù)部分乘以2,取整數(shù)部分,剩余小數(shù)繼續(xù)乘以2,直到小數(shù)部分為0為止。
? ?
? ?比如將十進(jìn)制小數(shù)0.125,轉(zhuǎn)換為二進(jìn)制數(shù):
? ?注意小數(shù)部分不是逆序取值了,而是順序,所以0.125的二進(jìn)制數(shù)是:001
? ?
3.口算法
? ?跟二進(jìn)制轉(zhuǎn)十進(jìn)制的原理是一樣的,只不過(guò)是反著來(lái)而已。用十進(jìn)制數(shù)減參照數(shù)(最接近本身數(shù)值,又小于等于本身數(shù)值的),減的開(kāi)就得1,減不開(kāi)就得0,差繼續(xù)遞減參照數(shù)。
2048 1024 512 256 128 64 32 16 8 4 2 1? ?比如我們?cè)侔?13轉(zhuǎn)回去:
213-128=85 減開(kāi)得1 85-64=21 減開(kāi)得1 21-32 減不開(kāi)得0 21-16=5 減開(kāi)得1 5-8 減不開(kāi)得0 5-4=1 減開(kāi)得1 1-2 減不開(kāi)得0 1-1 減開(kāi)得1? ?最終結(jié)果為:1101 0101,是不是和上面一樣。
? ?
四、二進(jìn)制轉(zhuǎn)八進(jìn)制
? ?八進(jìn)制與二進(jìn)制的關(guān)系:23=82^3=823=8,即用三位二進(jìn)制數(shù)表示一個(gè)八進(jìn)制數(shù)。
1.取三合一法
? ?從二進(jìn)制小數(shù)點(diǎn)位置,向左向右每三位取成一位(不足三位補(bǔ)零),將每一位的三個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),然后按順序排列,得到的便是八進(jìn)制數(shù)。
? ?
? ?如將1101.01轉(zhuǎn)化為八進(jìn)制:
? ?最終結(jié)果為:15.2
? ?
五、八進(jìn)制轉(zhuǎn)二進(jìn)制
1.取一分三法
? ?逆行上面的算法,將八進(jìn)制每一位數(shù)分解成三位二進(jìn)制數(shù),然后去零,便能得到結(jié)果。
? ?
? ?如將八進(jìn)制數(shù)43.2轉(zhuǎn)換為二進(jìn)制數(shù):
? ?最終結(jié)果為:100 011.01
? ?
六、二進(jìn)制轉(zhuǎn)十六進(jìn)制
? ?二進(jìn)制與十六進(jìn)制的關(guān)系:24=162^4=1624=16,即用四位二進(jìn)制數(shù)表示一個(gè)十六進(jìn)制數(shù)。相信大家都猜到了,他們的轉(zhuǎn)換方式與八進(jìn)制的相似。
? ?
1.取四合一法
? ?從二進(jìn)制小數(shù)點(diǎn)位置,向左向右每四位取成一位(不足四位補(bǔ)零),將每一位的四個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),然后按順序排列,得到的便是十六進(jìn)制數(shù)。
? ?
? ?如將二進(jìn)制數(shù)101011.101轉(zhuǎn)換為十六進(jìn)制:
? ?最終結(jié)果為:2B.A
? ?
七、十六進(jìn)制轉(zhuǎn)二進(jìn)制
1.取一分四法
? ?將一位十六進(jìn)制數(shù)分解為四位二進(jìn)制數(shù),去掉多余的零。
? ?
? ?如將十六進(jìn)制數(shù)6E.2轉(zhuǎn)換成二進(jìn)制數(shù):
? ?得到最終結(jié)果為:110 1110 . 001
? ?
八、十六進(jìn)制與八進(jìn)制的轉(zhuǎn)換
? ?十六進(jìn)制與八進(jìn)制不能直接轉(zhuǎn)換,可以先將其轉(zhuǎn)換為二進(jìn)制,再轉(zhuǎn)換為其他進(jìn)制。
? ?
九、八進(jìn)制、十六進(jìn)制、十進(jìn)制之間的轉(zhuǎn)換
1.直接轉(zhuǎn)換
? ?與二進(jìn)制按權(quán)相加法相同,只需改變XXX的值便可。
? ?
? ?將XXX進(jìn)制每一位上的數(shù)乘以權(quán),然后加起來(lái)的和就是十進(jìn)制。
? ?
? ?權(quán):假設(shè)X進(jìn)制,整數(shù)部分的第i位的權(quán)是Xi?1X^{i-1}Xi?1,小數(shù)部分第i位權(quán)為X?iX^{-i}X?i.
? ?
2.間接轉(zhuǎn)換
? ?先將其轉(zhuǎn)換為二進(jìn)制數(shù),再將二進(jìn)制數(shù)轉(zhuǎn)換為相應(yīng)進(jìn)制數(shù)即可。
? ?
結(jié)束語(yǔ)
? ?有的同學(xué)剛接觸進(jìn)制轉(zhuǎn)換可能會(huì)比較懵逼,甚至不清楚進(jìn)制的含義,其實(shí)只要把二進(jìn)制弄明白,其余進(jìn)制的轉(zhuǎn)換就會(huì)變得很EZ。
? ?
? ?還沒(méi)看懂的同學(xué)先別著急拔刀,讓我先跑39米,溜了~
總結(jié)
以上是生活随笔為你收集整理的编程基础知识(变简单的进制转换)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: crh寄存器_STM32 学习笔记(寄存
- 下一篇: 思岚激光建图传感器slamtec Map