日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

十进制小数与二进制小数相互转换

發布時間:2023/12/29 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 十进制小数与二进制小数相互转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、十進制小數轉二進制小數的方法

  今天看到鳥哥的一篇博客,里邊說的額是浮點數的問題,結果里邊的小數轉換成二進制數我就鬧不明白,通過在網上查詢,知道咋回事了,先上一段代碼(隨便寫的):

  /**
     * 十進制小數轉二進制小數的方法
     * @param $decimal     操作的小數(比如:0.75,0.57等)
     * @param $bit         位數保留多少位二進制數
     * @return [type]     $binary (小數的二進制數)
     */
    function getBinaryDecimal($decimal = 0,$bit = 32){
        if(!is_numeric($decimal))exit('參數錯誤!');
        
        $binary = '';        //返回的二進制數
        $base = $decimal;    //記錄計算的基數(以此為終止循環條件)
        $i = 0;                //控制二進制數的位數,因為可能無窮無盡,所以只能盡可能的接近
        while($base != 0 && $i++ < $bit){
            $tmp = 0;    //記錄每一次計算的結果
            $tmp = $base * 2;
            if($tmp >= 1){
                $base = $tmp - 1;
                $binary .= 1;
            }else{
                $base = $tmp;
                $binary .= 0;
            }
        }

        //返回用戶需要的指定位數
        return $binary;
    }

  上面的函數寫的有點簡陋,只是針對小數部分,差不多就那么個意思,接下來我就說下小數轉二進制數的計算方式,通過上面的函數也不難看出:

  例一:0.6(用小數去乘2,得到的結果大于1的,二進制數在該位就是1,然后用結果減去1剩下的小數繼續執行上一步操作,直到結果為0)

    計算表達式   結果    二進制數    剩余小數(結果) 

    0.6 * 2    1.2      1     0.2(1.2 - 1)

    0.2 * 2    0.4      0     0.4

    0.4 * 2    0.8      0     0.8

    0.8 * 2    1.6      1     0.6(1.6 - 1)

    ..........    .....      ...     .....

  例二:0.75 

    計算表達式   結果    二進制數    剩余小數(結果)  

    0.75 * 2    1.5      1     0.5(1.5 - 1)

    0.5 * 2    1       1      0(1 - 1)

    結果0.75的二進制數為0.11

    一直這樣計算下去,直到剩余的結果為0時,才算計算結束,然后把二進制數拼接起來就是該小數對應的二進制數了,例一會無限循環下去,例二則不會;

    其實上面的例子只是我們自己的理想算法,真正在程序中就算的結果可能回是 "0.49999999999999"而不是0.5,這樣的話0.75的二進制數也將是無窮無盡的;

    注意:可能一直計算下去會出現無窮無盡,所以我加了一個位數來控制,只能盡可能的接近值,而不能說一定準確的得到一個小數的二進制數

二、二進制小數轉十進制小數的方法

  上面咱們已經討論了如何將十進制小數轉換成二進制小數,就是不斷的*2,然后跟1比較來取二進制位的值,然后根據把剩余的值繼續乘于2,一直循環,知道結果為0時為止,那么二進制小數如何轉換成十進制的小數呢?接下來咱們就來看看

  例一:把二進制數0.11轉換成十進制小數

     (0.11)2 = 0 * 20+ 1 * 2-1+ 1 * 2-2

          = 0 + 0.5 + 0.25

          = 0.75

  以上就是計算的方式,小數點后的數字從-1開始,一直計算下去,下面是我隨便寫的兩句代碼:

  /**
     * 二進制小數轉十進制小數的方法
     * @param $binary     需要計算的二進制數
     * 
     * @return [type]     $result
     */
    function getDecimalResult($binary){
        if(!$binary)exit('參數錯誤!');

        //獲取數組數量
        $binary = str_split($binary);
        $binary_count = count($binary);
        //結果
        $result = 0;
        
        $i = 0;
        while($i < $binary_count){
            //計算結果
            $result += $binary[$i] * pow(2,-($i+1));
            $i++;
        }

        return $result;
    }

  以上就是二進制小數和十進制小數相互轉換的方法,寫的不好希望大家多多指正,謝謝!

總結

以上是生活随笔為你收集整理的十进制小数与二进制小数相互转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。