最近在弄藍牙BLE的項目,用到了進制,以前也學過進制,但每次使用的時候還是要去查資料,記也沒記住,所以決定寫一篇博客,要用的時候直接查。好記憶不如爛筆頭
首先來個十進制和二進制,畢竟接觸的最早
十進制:用數字表示0123456789
二進制:用數字表示01;
十進制轉換爲二進制:
一個十進制數,分爲整數部分和小數部分,如:1234567.89
下面來舉一個列子:
98轉換爲二進制
98/2 = 49........0
49/2 = 24........1
24/2 = 12........0
12/2 = 6.........0
6/2 = 3...........0
3/2 = 1 ...........0
1/2= 0 ...........1
轉換成的二進制爲(從後往前讀) 1000010;
計算方法:每次將整數部分除以2,得到餘數, 從後面往前面獲取;
小數部分轉換爲二進制:
小數部分乘以2,取整數,剩下的小數部分繼續乘以2,一直到小數部分爲0爲止。。。如果小數部分一直不爲0,則按照四捨五入的法則,根據後面一位是0還是1,取捨,如果是零,舍掉,如果是1,向入一位。換句話說就是0舍1入。
比如0.255;
0.255 * 2 = 0.51; ------0
0.51 *2 = 1.02; ------1
0.02 *2 =0.04; -----0
0.04*2 = 0.08; -----0
0.08 * 2 = 0.16; -----0
0.16 *2 = 0.32; ------0
0.32 *2 = 0.64; -----0
0.64*2=1.28; ------1
0.28 *2=0.56; -------0
0.56 *2 =1.12; -------1
0.12*2 = 0.24; ------0
0.24*2 = 0.48; ------0
0.48*2 = 0.96; ------0
0.96*2 = 1.92; -------1
0.92*2=1.84; -------1
0.84*2 =1.68; -------1
//這裏我寫的夠長了,這裏就這樣了吧
二進制(從前往後讀)0.
即是:0.01000001 (後面的我捨棄了,0捨棄,1向前進一位)
合併整數和小數
十進制轉換爲二進制
98.25
98.25轉換二進制1000010.01000001;
---------------------------老子是一條分割線
二進制轉換爲十進制:
方法:按權重相加法,即二進制每位上的數乘以權重,然後相加之和即是十進制數
比如二進制數1101: 1*2^0 + 0*2^1 + 1*2^2 + 1*2^3=
轉換爲十進制 1 + 0 + 4 + 8 = 13;
小數轉換爲十進制: 0.0111;
0 *2^-1 +1 *2^-2 + 1*2^-3 +1*2^-4 =
0 +1/4 +1/8 +1/16 = 0.4375
整數和小數:
1101.0111 = 13.4375;
十進制和八進制的轉換
十進制:0123456789
八進制:01234567
可以類似於十進制轉二進制
整數部分;除8取餘法,小數部分,剩義8取整數
一直取到小數部分爲零爲止。如果永遠不能爲零,就同十進制數的四捨五入一樣,暫取個名字叫3舍4入。
將796轉換爲八進制
796/8=99 .....4
99/8 = 12 ......3
12/8 = 1 ..........4
1/8 = 0 ..............1
轉爲八進制爲1434
小數0.703125
0.70315 * 8 = 5.625 ---5
0.625 *8 = 5.0 ---5
十進制:0.55
整數和小數:
796.703125
1434.55
八進制轉換爲十進制:
1434.55
1434
4*8^0 +3 *8^1 + 4 *8^2 + 1* 8^3 =
4 + 24 +256 + 512 = 796
小數部分
0.0703125
0*8^-1 + 7*8^-2 + 0*8^-3 + 3* 8^-4 + 1*8^-5 + 1*8^-6 + 2*8^-7 + 5*8^-8=
十進制轉換爲十六進制
十進制:0123456789
十六進制:0123456789ABCDEF
類似於十進制轉換二進制和十進制轉換爲八進制
十進制轉爲16進制(整數除以16):
91.876
91
91/16 = 5........11
5/16 = 0.........5
91轉換爲十六進制5B
0.876轉爲16進制
0.876*16 = 14.016 ------14
0.016 * 16 = 0.256 ---0
0.256 * 16 = 4.096 -----4
轉換後的十六進制0.E04
91.867轉換爲十六進制爲5B.E04
16進制轉換爲10進制
2a轉換爲十進制
A * 16^0 + 2 * 16^1 = 42
0.5b轉換爲十進制
5*16^-1 + 11 *16^-2 =
0.3125 +0.04296875 =
二進制轉換爲8進制
· 需要了解一個數學關係,即2^3=8,2^4=16,而八進制和十六進制是用這關係衍生而來的,即用三位二進制表示一位八進制,用四位二進制表示一位十六進制數。
· 接着,記住4個數字8、4、2、1(2^3=8、2^2=4、2^1=2、2^0=1)。現在我們來練習二進制與八進制之間的轉換。(這段話來自簡書的一篇博文:http://www.jianshu.com/p/555cd32e99cc)希望大家也去看看原文,我也是看這篇博文學的進制轉換
二進制轉換爲8進制
· 方法:取三合一法,即從二進制的小數點爲分界點,向左(向右)每三位取成一位,接着將這三位二進制按權相加,得到的數就是一位八位二進制數,然後,按順序進行排列,小數點的位置不變,得到的數字就是我們所求的八進制數。
· 如果向左(向右)取三位後,取到最高(最低)位時候,如果無法湊足三位,可以在小數點最左邊(最右邊),即整數的最高位(最低位)添0,湊足三位。
·
作者:MPPC
鏈接:http://www.jianshu.com/p/555cd32e99cc
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
二進制
11 011.101 111
011 011.101 111
整數部分 =33
1*2^0 + 1*2^1 + 0*2^2 = 3
1 + 2 + 0
1*2^0 + 1*2^1 + 0*2^2 = 3
1 +2 + 0 =
小數部分 =0.57
1*2^0 + 0*2^1 + 1*2^2 = 5
1 + 0 + 4
1*2^0 + 1*2^1 + 1*2^2 = 7
1 +2 + 4 =
011 011.101 111轉換爲八進制33.57
八進制轉換爲二進制
33.57
取一分三法,即將一位八進制數分解成三位二進制數,用三位二進制按權相加去湊這位八進制數,小數點位置照舊。
先來看看二進制的規律 111 1*2^0 + 1*2^1 + 1*2 ^2 = 1 + 2 + 4也就是如果數不爲0,而爲1的時候,則乘以權重可以 等於
第0位 1
第2位 2
第3位 4
33.57
3 ======》 011
3=======》011
5======》101
7=======》 111
所以八進制轉換爲8進製爲 11 011.101 111
二進制與16進制的轉換
與二進制與八進制轉換相似,只不過是一位(十六)與四位(二進制)的轉換
111101.110111
00 11 1101,1101 1100
1*2^0 +1*2^1 + 0*2^2 +0*2^3 =
1 +2 +0 +0 =3
1×2^0 +0*2^1 + 1*2^2 +1×2^3 =
1 + 0 + 4 +8 = 13
整數:3D
小數
1*2^0 +0*2^1 + 1*2^2+ 1*2^3 = 13
1 + 0 + 4 + 8 =
0*2^0 + 0^2^1 + 1*2^2 + 1*2^3 =
0 + 0 + 4 + 8 = 12
小數部分轉換爲十六進制:DC
111101.110111
轉換爲十六進制等於3D.DC
十六進制轉換爲2進制
1111 = 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 = 1 + 2 +4 +8
取一分四法,即將一位十六進制數分解成四位二進制數,用四位二進制按權相加去湊這位十六進制數,小數點位置照舊。
3D.DC
3 =======>11
D=======>1101
D======>1101
C=====>11
則二進制爲:111101,110111
如果有錯誤,歡迎告知QQ2235577382,謝謝