Go語言實現(xiàn)二進制與十進制互轉(zhuǎn)的示例代碼
更新時間:2023年05月04日 15:14:54 作者:往之不諫
這篇文章主要和大家詳細介紹了Go語言中實現(xiàn)二進制與十進制互相轉(zhuǎn)換的示例代碼,文中的代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
最近在備考軟考的軟件設計師考試,在學習過程遇到很多于計算機基礎計算相關(guān)的知識點,正好最近在學Go語言,所以就把計算的方式用Go語言實現(xiàn)一下。
當前還在學習過程中,如有問題,歡迎大佬們指正
二進制轉(zhuǎn)十進制
/*
轉(zhuǎn)換規(guī)則: 11001 從末尾到開頭,以2為底數(shù),從0開始遞增為指數(shù) * 二進制數(shù),然后將這些二進制數(shù)相加即可得出10進制數(shù)
11001 = 1 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3 + 1 * 2^4 = 1 + 0 + 0 + 8 + 16 = 25
這個規(guī)則也適用于其他進制轉(zhuǎn)換為十進制,只需要把底數(shù)替換為相應的進制數(shù)即可,這種方法叫做 “按權(quán)展開法"
注意: 二進制數(shù)也有小數(shù)點,區(qū)別是小數(shù)點左邊的指數(shù)為正數(shù),右邊的指數(shù)為負數(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 {
// 獲取二進制字符字符串
// 使用前可使用正則校驗 [0-1]|[0-1].[0-1]
var text = val
// 指數(shù) v1
var v1 float64 = 0
var len = len(text)
// 查看是否包含小數(shù)點
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++
}
// 這里有個BUG,未判斷得出的十進制數(shù)小數(shù)點后面有幾位小數(shù)
return strconv.FormatInt(int64(result), 10)
}十進制轉(zhuǎn)二進制
/*
十進制轉(zhuǎ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ù)字是否是負數(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ù),拼接二進制數(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]))
}
// 如果是負數(shù),則增加符號
if bool {
finalResult = fmt.Sprint("-",finalResult)
}
return finalResult
}總結(jié)
- R進制轉(zhuǎn)十進制數(shù)的方法叫做按權(quán)展開法,這個權(quán)指的是指數(shù)
- 指數(shù)在小數(shù)點右邊為負數(shù),左邊為正數(shù) 例如 二進制數(shù) "1110.01" 的指數(shù)依次為 -2 -1 0 1 2 3
到此這篇關(guān)于Go語言實現(xiàn)二進制與十進制互轉(zhuǎn)的示例代碼的文章就介紹到這了,更多相關(guān)Go語言二進制與十進制互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
分析Go語言中CSP并發(fā)模型與Goroutine的基本使用
我們都知道并發(fā)是提升資源利用率最基礎的手段,尤其是當今大數(shù)據(jù)時代,流量對于一家互聯(lián)網(wǎng)企業(yè)的重要性不言而喻。串流顯然是不行的,尤其是對于web后端這種流量的直接載體。并發(fā)是一定的,問題在于怎么執(zhí)行并發(fā)。常見的并發(fā)方式有三種,分別是多進程、多線程和協(xié)程2021-06-06
golang使用sync.Once實現(xiàn)懶加載的用法和坑點詳解
這篇文章主要為大家詳細介紹了golang使用sync.Once實現(xiàn)懶加載的用法和坑點,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-11-11

