golang位运算:输入一个int32输出其二进制形式
func BinaryFormat(num int32) string {
n := uint32(num) // 将num转换成无符号的 uint32
sb := strings.Builder{}
/*
定义一个无符号的 c unit32 和 无符号的 n 进行比较 格式为:1000 0000 0000 0000 0000 0000 0000 0000
*/
c := uint32(math.Pow(2, 31))
for i := 0; i < 32; i++ {
// 循环进行 & 运算,& 运算符的运算规则是,只有两个都为 1,结果才为 1
// 如果结果 > 0,那么我们当前位就拼接 1,否则就拼接 0
if n&c > 0 {
sb.WriteString("1")
} else {
sb.WriteString("0")
}
// 然后将 c 右移 1 位继续比较
c >>= 1
} // 最后将拼接好的 二进制数 sb 字符串返回
return sb.String()
}
通过上面的代码可以看到,凭借字符串使用到了strings.Builder{} ,而不是使用 += 来进行拼接,这是为什么呢?
其实使用 += 也是可以的,也是一种比较常用直接的方法,但是它却有一定的代价,由于golang的字符串是不可变类型,也就是说每一次对字符串的“原地”修改都会重新生成一个string,再把数据复制进去,也就是每一次循环都会进行创建、分配内存、销毁等一系列操作,这样一来将会产生很可观的性能开销。
更为详情的比较可以看这篇文章:go 源码阅读 strings.Builder 与 += 拼接区别
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
react 渲染 markDown 文档,使用虚拟列表优化
12
大家好,我是Tang,加入多久了呢?我已经续费上了,你们懂吧 ,但是一直没自我介绍,本人不太会说话,说话也比较直,有啥说啥,就简单说两句吧,既然让我说几句呢,那我就说几句。也是想了想啊,说哪几句呢,那我就说这几句。那么我相信啊,这几句呢,嗯也是比那几句强。我今天呢,就先说这几句。那么如果大家觉得啊说这几句不够全面啊,将来呢再给我补充几句。 本人大专, 毕业于2021年6月,大二疫情期间在家上网课的
3
#自我介绍#
大家好,我是Tang,加入多久了呢?我已经续费上了,你们懂吧[坏笑],但是一直没自我介绍,本人不太会说话,说话也比较直,有啥说啥,就简单说两句吧,既然让我说几句呢,那我就说几句。也是想了想啊,说哪几句呢,那我就说这几句。那么我相信啊,这几句呢,嗯也是比那几句强。我今天呢,就先说这几句。那么如果大家觉得啊说这几句不够全面啊,将来呢再给我补充几句。
本人大专,
毕业于2021年6月,大二疫情期间在家上网课的时候同时也在家远程实习,课基本没上,所以就大二下学期成绩第二(其他学期肯定第一啦)[猪头],然后,
2020年12月开始第二份实习一直到毕业,
2021年7月,毕业后的第一份前端工作,小公司,
2022年6月,由于公司一直没什么盈利,宣布准备解散开发部门,然后,我没了,2022年7月,去面试中级前端开发工程师,由于两个堆栈问题没答上来,就没通过,2022年9月,入职一家新公司,也是前端,小公司,我来之前公司50-60人,现在10个,目前拿着7k的工资,干10几k的活
目前自己的主打项目:《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=夜读》还在紧张开发中,前端界面完成30%左右,后端:0%,
由于后端属于初学者,有 golang,和nest.js,golang是第二份实习老板叫学的,因为要写开发文件给老板自动生成接口,而且每周五老板都会培训golang,
就先说这两句[发抖]
10
兄弟们,它漏出犄角了,原来CSS才是隐藏的小黑子
13
vue3 中隐藏的实用API
8
