c++十进制转二进制_二进制与十进制相互转换的原理
┇鋪墊
二進制,簡單來說,是一種運算規(guī)則,每一位達到“二”就進一位,故稱為“二” “進” 制。在我們?nèi)粘S嬎憷锩恳晃坏健笆边M一位的十進制,類比一下(如9+1=10),在二進制里的“進位”,1+1應(yīng)該等于10(“個位”2變0進“十位”1)。
但有一點得注意,上面二進制運算結(jié)果“10”在十進制里還是二,而不是十。
┇正題
在學(xué)習(xí)二進制與十進制相互轉(zhuǎn)換時,會學(xué)到下面的轉(zhuǎn)換方法:
- 十進制轉(zhuǎn)二進制
將十進制表示的數(shù)除以二取余數(shù),再將上次運算的商除以二取余數(shù),不斷重復(fù),直到商為0結(jié)束。最后把余數(shù)從后往前依次排列出新的數(shù)。
例如:10
10÷2=5······0(?)
5÷2=2······1(?)
2÷2=1······0(?)
1÷2=0······1(?)
把余數(shù)從后往前排,便是1010(????)
- 二進制轉(zhuǎn)十進制
將二進制里的數(shù)從最左位開始分別乘以2?(n表示這一位的右邊還有幾位,最后一位n=0),最后把 各個 位計算后的結(jié)果 相加。
例如:1010
1×23 + 0×22 + 1×21 + 0×2? = 10
那么問題來了,為什么這樣計算就可以達到效果呢?以及為什么要有“從后往前”,“乘以2?”這些奇怪的方式?
有一種思維方式叫比較推理我們拿平時最熟悉的十進制來說。
比如“1234”,我們可以把它變形為1×103+2×102+3×101+4×10?,結(jié)果還是1234。那么剛剛二進制的“1010”表示的1×23 +0×22+1×21+0×2? 和上面的式子非常相似。不妨假設(shè),二進制轉(zhuǎn)換十進制的運算實質(zhì)和這個一樣。
一個非負(fù)整數(shù)可以理解為有多少個1相加在1×103+2×102+3×101+4×10?這個式子中,103是表示個位進位到千位要加1的個數(shù)多少,如3000就可以表示為3×103,或者說有3000個1相加。同理后面的也是如此。
那么不難想象在1×23 +0×22+1×21+0×2?里23,22,21,2?也表示是從個位進位到該位要加1的個數(shù)多少。
再詳細(xì)一點
二進制 0 1 10 11 100 101 110 111 1000 ··十進制0 1 2 3 4 5 6 7 8 ···
二進制中,從一位到兩位要加2個1,從一位到三位要加4(22)個1,從一位到四位要加8(23)個1,這很容易就可以推出后面的情況。而且很容易理解,因為每一位從0到1再到0要經(jīng)過兩次,那么使這一位變化的要計算兩次。
在十進制轉(zhuǎn)二進制中,其實是對上面二進值轉(zhuǎn)十進制的逆向運算
如之前的10÷2=5······0
我們可以把10改寫成1×23 +0×22+1×21+0×2?,那么就可以很容易明白,在除以2后,10變成了1×22 +0×21+1×2? + 0 前面的部分就是商5,后面的0就是余數(shù)。再把1×22 +0×21+1×2?除以2,5就變了1×21+0×2? + 1,前面部分商就是2,后面的1就是余數(shù)。同理后面類似
這些余數(shù)之所以可以表示為二進制表示中相對應(yīng)位的值,就是因為將這些個值反過去依次乘二乘回去就會變成原來式子。
至于為何把余數(shù)“從后往前”排列,就是因為這是在二進制轉(zhuǎn)十進制的運算結(jié)構(gòu)基礎(chǔ)上而來的。越先余的數(shù),除二的次數(shù)越少,那么它變化原來的情況乘二次數(shù)就越少,那么根據(jù)二進制轉(zhuǎn)十進制里的運算結(jié)構(gòu),就排在最后邊。
這就是我對于二進制與十進制相互轉(zhuǎn)換的理解,其目的就是為了讓大家熟悉這之間的進位的實質(zhì)與這些公式背后的緣由。當(dāng)然這個其實并不全面,這里只涉及到非負(fù)整數(shù)的情況,至于其它方面,則還需要其他的東西來進行,這里就不再寫了(我懶)
這是我粗糙很水的第一篇文章,望大佬批評總結(jié)
以上是生活随笔為你收集整理的c++十进制转二进制_二进制与十进制相互转换的原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python集合常用方法_Python中
- 下一篇: 五分钟,手撸一个Spring容器!