• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go实现整型的二进制转化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

go中已经实现了int->bin的转化函数,我这里只是化过程逻辑的实现,至于原理我就假设大家都知道了

本案例只考虑  int->bin  的转化

包含了正整数,负整数,0 的转化

 

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),
    )
}

结果 :

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

 

比如-11111的转化:

变为整数: 11111
bin: 10101101100111
~bin : 01010010011000
结果:1010010011001

 

比如-1的转化:

变为整数: 1
bin: 00000001
~bin : 11111110
结果:11111111

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GO--null.String怎么转换string发布时间:2022-07-10
下一篇:
[golang]Go常见问题:#command-line-arguments:***:undefined:***发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap