PHP 二进制和十进制转换

本文详细介绍了PHP如何进行二进制和十进制之间的转换,包括使用内置函数bindec()将二进制转换为十进制,以及使用decbin()将十进制转换为二进制。通过实例代码解析了转换过程,帮助开发者更好地理解和应用这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
class Number{
    public $number;
    public $result;
    public $limit = 0;
    /**
     * 二进制转十进制
     * @param $number
     * @return mixed
     */
    public function twoChangeTen($number){
        if (strpos($number , '.')){
            $arr_number = explode('.' , $number);
            $this->result = $this->twoChangeTenShang($arr_number[0]).'.'.$this->twoChangeTenShangYv($arr_number[1]);
        }else{
            $this->result = $this->twoChangeTenShang($number);
        }
        return $this->result;
    }

    /**
     * 计算商
     * @param $number
     * @return float|int|string
     */
    public function twoChangeTenShang($number){
        $result = '';
        $j = 0;
        for ($i = strlen($number); $i > 0; $i--){
            $result += substr($number , $i-1 , 1) * pow(2 , $j);
            $j++;
        }
        return $result;
    }

    /**
     * 计算余
     * @param $number
     * @return bool|string
     */
    public function twoChangeTenShangYv($number){
        $result = '';
        for ($i = 0; $i < strlen($number); $i++){
            $result += substr($number , $i , 1) * pow(2 , - ($i+1));
        }
        return substr($result , 2);
    }

    /**
     * 十进制转二进制
     * @param $number
     * @return mixed
     */
    public function tenChangeTwo($number){
        $this->number = $number;
        if (strpos($number , '.')){
            $exp = explode('.',$number);
            $this->tenChangeTwoYv('0.'.$exp[1]);
            $yv = substr($this->result , 1);
            $this->result = '';
            $this->tenChangeTwoJi($exp[0]);
            $data = $this->result.'.'.$yv;
        }else{
            $this->tenChangeTwoJi($this->number);
            $data = $this->result;
        }
        return $data;
    }

    /**
     * 计算积
     * @param $number
     * @return float
     */
    public function tenChangeTwoJi($number){
        if ($number == 0)return $this->result = 0;
        $this->number = floor($this->number / 2);
        $this->result = $number % 2 . $this->result;
        if ($this->number >= 1){
            $this->tenChangeTwoJi($this->number);
        }
    }

    /**
     * 计算余
     * @param $number
     * @return bool
     */
    public function tenChangeTwoYv($number){
        if (!strpos($number,'.') || $this->limit > 55){
            $this->result .= 1;
            return false;
        }
        $exp = explode('.',$number);
        $this->result .= $exp[0];
        $data = '0.'.$exp[1];
        $number = $data * 2;
        $this->limit++;
        $this->tenChangeTwoYv($number);
    }
}



$number_obj = new Number();
echo $number_obj->tenChangeTwo(0.7);
//echo $number_obj->twoChangeTen('10111000000010');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值