PHP演算法 十進位制二進位制互相轉化(含小數)

2022-04-21 23:52:27 字數 1808 閱讀 8578

1、二進位制轉換十進位制

原理:小數點前或者整數要從右到左用二進位制的每個數去乘以2的相應次方並遞增,小數點後則是從左往右乘以二的相應負次方並遞減。

例:10101.1011 = 

1*20+0*21+1*22+0*23+1*24.1*2-1+0*2-2+1*2-3+1*2-4 = 1+0+4+0+16+0.5+0+0.125+0.0625 = 21.6875

abcd.efg = d*20

+c*21

+b*22

+a*23

+e*2-1

+f*2-2

+g*2-3

#**實現

1

$number = "10101.1011";

2$i = 0;

3$sum = 0;

4$float = 0;

5$numberarr = explode(".",$number

);

6$len = strlen($numberarr['0']);

7$numbera = strrev($numberarr['0']); //

反轉字串 因為整數需要從右到左運算

8for($i;$i

<$len;$i++)

11if(strpos($number,"."))

17echo "浮點數:".($sum+$float

);

18 }else

;

2、十進位制轉換二進位制

原理:十進位制整數轉換為二進位制整數採用"除2取餘,逆序排列"法 整數部分除2有餘數得1 整除得0 以此類推最後調轉資料得出二進位制

十進位制小數轉換成二進位制小數採用"乘2取整,順序排列"法 小數部分乘2取整數得1取1 得0取0 然後小數部分再乘2 以此類推 

例:21.6875 = 21/2 10/2 5/2 2/2 1/2 . 0.6875*2  0.375*2  0.75*2  0.5*2 = 10101.1011

整數字 21/2 = 10.5  有餘數  得  1      小數字  0.6875*2 =  1.375  取得整數字  1

10/2    =  5       整除得  0           0.375*2  =  0.75   取得整數字  0

5/2  = 2.5   有餘數  得  1          0.75*2   =  1.5    取得整數字  1

2/2  = 1     整除    得  0          0.5*2    =   1     取得整數字  1

1/2  = 0.5  有餘數  得  1 

整數字為0  結束運算 得 10101         小數字為0  結束運算   得1011

拼接得 

10101.1011

#**實現

1

$number = "21.6875";

2$i = 1;

3$arrint = "";

4function

integer($number,$i,$arrint

)else

13if($decide

< 1)16}

17return

$arrint;18

}19function floating($float,$i,$arrint

)else

27if($decide >= 1)else32}

33return

$arrint;34

}35if(!strpos($number,"."))else

44echo

$result;

二進位制 十進位制 十六進製制互相轉換

今天看書講到十進位制 二進位制 十六進製制的互相轉換,自己試了下。十進位制和十六進製制互相轉換需要借助二進位製作為中間媒介。用到了stl標準庫的向量 佇列 字串。decimal2hex2decimal.cpp 定義控制台應用程式的入口點。include stdafx.h include includ...

十進位制與二進位制互相轉換指南

電腦科學概論最近在學這個。費了大概一星期的課餘時間來弄懂正負數 整數浮點 小數分數的互相轉換。寫出來,方便以後複習用。與十進位制的滿十進一一樣,二進位制是滿二進一的。所以用二進位制表示的數與十進位制存在如下關係 以8位為例 為了便於排版,用了豎排 1 128 27 1 64 26 1 32 25 1...

二進位制轉十進位制

二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...