中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言怎么實現二進制與十進制互轉

發布時間:2023-05-04 16:10:20 來源:億速云 閱讀:103 作者:iii 欄目:開發技術

這篇“Go語言怎么實現二進制與十進制互轉”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Go語言怎么實現二進制與十進制互轉”文章吧。

二進制轉十進制

/*
   轉換規則:   11001 從末尾到開頭,以2為底數,從0開始遞增為指數 * 二進制數,然后將這些二進制數相加即可得出10進制數
    11001 = 1 * 2^0  + 0 * 2^1  + 0 * 2^2  + 1 * 2^3  + 1 * 2^4   =  1 + 0 + 0 + 8 + 16 = 25
    這個規則也適用于其他進制轉換為十進制,只需要把底數替換為相應的進制數即可,這種方法叫做  “按權展開法"

    注意:    二進制數也有小數點,區別是小數點左邊的指數為正數,右邊的指數為負數
    例如:    11.01 =  1 * 2^-2   + 0 * 2^-1 +  1 * 2^0  + 1 * 2^1  = 0.25 + 0 + 1 + 2 = 3.25
*/
func binaryToDecimal(val string) string  {
    // 獲取二進制字符字符串
    // 使用前可使用正則校驗    [0-1]|[0-1].[0-1]
    var text = val
    // 指數 v1
    var v1 float64 = 0
    var  len  =  len(text)
    // 查看是否包含小數點
    contains := strings.Contains(text, ".")
    if contains {
        index := strings.LastIndex(text, ".")
        if index == (len -1) {
            text = text[0 : len-1]
        } else {
            v3  :=len - index
            v3--
            v1 = float64(0 - v3)
        }
    }
    fmt.Println(v1)
    // 結果
    var result float64
    for i := len -1; i >= 0; i-- {
        u := string(text[i])
        if u == "." {
            continue
        }
        v2,error := strconv.ParseFloat(u, 64)
        if error != nil {
            fmt.Println("轉換失敗",error)
        }
        // 乘數
        pow := math.Pow(2, v1)
        // 數值累加
        result = result + (v2 * pow)
        // 指數遞增
        v1++
    }
    // 這里有個BUG,未判斷得出的十進制數小數點后面有幾位小數
    return strconv.FormatInt(int64(result), 10)
}

十進制轉二進制

/*
   十進制轉 二進制的方法  十進制數除以2取余數法
 */
func  decimalToBinary(val string) string  {
    number, err := strconv.ParseInt(val, 10, 64)
    if err != nil {
        fmt.Println("數字轉換失敗",err)
        return ""
    }

    // 查看數字是否是負數
    var bool  = number < 0

    if bool {
        number = 0 -number
    }

    var result  = ""
    for true {
        if number == 1 {
            result = fmt.Sprint(result,number)
            break
        }
        //// 除數
        var v1 = number / 2
        //// 余數
        var v2 = number % 2
        // 取余數,拼接二進制數
        result = fmt.Sprint(result,v2)
        number = v1
    }
    
    // 反轉字符串
    var finalResult  = ""
    var len = len(result)
    for i := len - 1; i >= 0; i-- {
        finalResult = fmt.Sprint(finalResult,string(result[i]))
    }
    // 如果是負數,則增加符號
    if bool {
        finalResult = fmt.Sprint("-",finalResult)
    }
    return finalResult
}

以上就是關于“Go語言怎么實現二進制與十進制互轉”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广西| 毕节市| 都兰县| 河间市| 葵青区| 栖霞市| 通海县| 永新县| 保亭| 仁化县| 娱乐| 宜城市| 东乡族自治县| 济南市| 宜宾县| 敖汉旗| 延津县| 芒康县| 渭南市| 旬邑县| 彰化市| 镇原县| 西昌市| 淄博市| 蕲春县| 建始县| 平阴县| 宁河县| 奉节县| 乌什县| 西贡区| 临湘市| 三江| 喜德县| 临安市| 开鲁县| 丘北县| 信宜市| 大安市| 望奎县| 双牌县|