您好,登錄后才能下訂單哦!
這篇“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語言怎么實現二進制與十進制互轉”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。