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