91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

仪征市| 两当县| 北海市| 惠来县| 古丈县| 侯马市| 吉木萨尔县| 思南县| 盐津县| 西吉县| 巢湖市| 区。| 开江县| 东台市| 宁都县| 昌图县| 扶风县| 贺州市| 长葛市| 三明市| 聊城市| 三门县| 定南县| 鱼台县| 杭州市| 松溪县| 韶山市| 民丰县| 江陵县| 镶黄旗| 阳城县| 南召县| 濮阳市| 合江县| 武胜县| 运城市| 平果县| 太仆寺旗| 盖州市| 简阳市| 南靖县|