go實現整型的二進制轉化

go中已經實現了int->bin的轉化函數,我這裏只是化過程邏輯的實現,至於原理我就假設你們都知道了函數

本案例只考慮  int->bin  的轉化spa

包含了正整數,負整數,0 的轉化code

 

package main

import (
    "fmt"
    "strconv"
)

//bin表示轉化後的位數
func convertToBin(n int,bin int) string{
    var b string
    switch {
    case n==0:
        for i:=0;i<bin;i++{
            b+="0"
        }
    case n>0:
        //strcov.Itoa 將 1 轉爲 "1" , string(1)直接轉爲assic碼
        for ; n>0;n/=2{
            b=strconv.Itoa(n%2)+b
        }
        //加0
        j:=bin-len(b)
        for  i:=0;i<j;i++{
            b="0"+b
        }
    case n<0:
        n=n*-1
        // fmt.Println("變爲整數:",n)
        s:=convertToBin(n,bin)
        // fmt.Println("bin:",s)
        //取反
        for i:=0;i<len(s);i++{
            if s[i:i+1]=="1"{
                b+="0"
            }else{
                b+="1"
            }
        }
        // fmt.Println("~bin :",b)
        //轉化爲整形,以後加1 這裏必需要64,不然在轉化過程當中可能會超出範圍
        n,err :=strconv.ParseInt(b,2,64)
        if err!=nil{
            fmt.Println(err)
        }
        //轉爲bin
        //+1
        b=convertToBin(int(n+1),bin)
    }
    return b
}

func main(){
    fmt.Println(
        convertToBin(5,8),  //101
        convertToBin(13,8), //1101
        convertToBin(11111,8),
        convertToBin(0,8),
        convertToBin(1,8),
        convertToBin(-5,8),
        convertToBin(-11111,8),
    )
}

結果 :blog

5     13      11111      0    1      -5    -11111
00000101
00001101 10101101100111 00000000 00000001 11111011 1010010011001

 

好比-11111的轉化:string

變爲整數: 11111
bin: 10101101100111
~bin : 01010010011000
結果:1010010011001

 

好比-1的轉化:it

變爲整數: 1
bin: 00000001
~bin : 11111110
結果:11111111
相關文章
相關標籤/搜索