溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go語言怎么實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互轉(zhuǎn)

發(fā)布時(shí)間:2023-05-04 16:10:20 來源:億速云 閱讀:102 作者:iii 欄目:開發(fā)技術(shù)

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

二進(jìn)制轉(zhuǎn)十進(jìn)制

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

    注意:    二進(jìn)制數(shù)也有小數(shù)點(diǎn),區(qū)別是小數(shù)點(diǎn)左邊的指數(shù)為正數(shù),右邊的指數(shù)為負(fù)數(shù)
    例如:    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  {
    // 獲取二進(jìn)制字符字符串
    // 使用前可使用正則校驗(yàn)    [0-1]|[0-1].[0-1]
    var text = val
    // 指數(shù) v1
    var v1 float64 = 0
    var  len  =  len(text)
    // 查看是否包含小數(shù)點(diǎn)
    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)
    // 結(jié)果
    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("轉(zhuǎn)換失敗",error)
        }
        // 乘數(shù)
        pow := math.Pow(2, v1)
        // 數(shù)值累加
        result = result + (v2 * pow)
        // 指數(shù)遞增
        v1++
    }
    // 這里有個(gè)BUG,未判斷得出的十進(jìn)制數(shù)小數(shù)點(diǎn)后面有幾位小數(shù)
    return strconv.FormatInt(int64(result), 10)
}

十進(jìn)制轉(zhuǎn)二進(jìn)制

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

    // 查看數(shù)字是否是負(fù)數(shù)
    var bool  = number < 0

    if bool {
        number = 0 -number
    }

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

以上就是關(guān)于“Go語言怎么實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互轉(zhuǎn)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI