当前位置: 首页 > wzjs >正文

优化网站的软件留言板网站建设总结

优化网站的软件,留言板网站建设总结,网站建设包括内容,编程应用Golang实现:计算整数二进制中1的个数(包含负数补码) 问题分析 这道题目要求我们计算一个整数的二进制表示中1的个数,对于负数需要考虑其补码形式。 例如: 输入:5(二进制:101&…

Golang实现:计算整数二进制中1的个数(包含负数补码)

问题分析

这道题目要求我们计算一个整数的二进制表示中1的个数,对于负数需要考虑其补码形式。

例如:

  • 输入:5(二进制:101)→ 输出:2
  • 输入:-3(二进制补码:1111...1101)→ 输出:31(32位系统下)
解题思路

我们可以利用位运算中的与运算(&)来检查整数的每一位是否为1。具体步骤如下:

  1. 初始化计数器为0
  2. 通过循环检查整数的每一位:
    • 将整数与1进行与运算(n & 1),如果结果为1,则计数器加1
    • 将整数右移一位(n >>= 1),继续检查下一位
  3. 对于负数,Go语言中整数采用补码表示,右移时会保留符号位,因此需要特别处理

需要注意的是,对于负数,右移操作会导致最高位一直为1,可能会陷入死循环。因此,我们需要限制循环次数为整数的位数(通常为32位或64位)。

Golang代码实现

下面是Golang语言的实现方案:

package mainimport ("fmt"
)// hammingWeight 计算整数二进制中1的个数
func hammingWeight(num int) int {count := 0// 遍历整数的每一位(32位整数)for i := 0; i < 32; i++ {// 检查当前位是否为1if (num & 1) == 1 {count++}// 右移一位,检查下一位num >>= 1}return count
}func main() {// 测试示例fmt.Println(hammingWeight(5))   // 输出: 2 (二进制: 101)fmt.Println(hammingWeight(0))   // 输出: 0fmt.Println(hammingWeight(-1))  // 输出: 32 (32位系统下的-1的补码是全1)fmt.Println(hammingWeight(-3))  // 输出: 31 (32位系统下的-3的补码是1111...1101)
}
算法复杂度分析
  • 时间复杂度:O(1),因为我们只需要遍历32位(固定次数)
  • 空间复杂度:O(1),只使用了常数级别的额外空间
代码解析
  1. 函数定义hammingWeight(num int) int 接收一个整数参数,返回其二进制中1的个数

  2. 位运算检查

    • num & 1:检查整数的最低位是否为1
    • num >>= 1:将整数右移一位,准备检查下一位
  3. 负数处理

    • 在Go语言中,整数默认是有符号的,负数采用补码表示
    • 右移操作会保留符号位(算术右移),因此负数的右移不会导致整数变为0
    • 通过固定循环32次(32位整数),确保检查了所有位
优化方案

上述方法需要遍历32位,实际上可以通过更高效的方法减少遍历次数。一个经典的优化是利用n & (n-1)操作:

func hammingWeight(num int) int {count := 0for num != 0 {// n & (n-1) 会将n的二进制表示中最后一个1变为0num &= (num - 1)count++}return count
}

这个优化的核心思想是:n & (n-1)操作会清除n的二进制表示中最后一个1。例如:

  • n = 1010(十进制10),n-1 = 1001,则n & (n-1) = 1000(清除了最后一个1)
  • 每执行一次这个操作,就会清除一个1,直到n变为0

这样,对于一个有k个1的整数,只需要循环k次,时间复杂度为O(k),比固定循环32次要高效。

总结

这个算法题主要考察位运算的应用和对整数二进制表示的理解。通过与运算(&)和右移操作(>>),我们可以高效地计算整数二进制中1的个数。对于负数,需要注意Go语言中采用补码表示的特性。


文章转载自:

http://7jB8ecGR.zypnt.cn
http://l35m1jqt.zypnt.cn
http://B2Cfq9M6.zypnt.cn
http://MsaLWIOY.zypnt.cn
http://95k78uYm.zypnt.cn
http://Q0bTjjp2.zypnt.cn
http://INPRg86c.zypnt.cn
http://wDB1A6WZ.zypnt.cn
http://tGVLMO2R.zypnt.cn
http://pMld2XgM.zypnt.cn
http://tsoYawOh.zypnt.cn
http://Vbo4Zl3V.zypnt.cn
http://mpBWn8c2.zypnt.cn
http://eDcN7b4I.zypnt.cn
http://HoZRj9UW.zypnt.cn
http://3D1IlZVL.zypnt.cn
http://tLBwF7rf.zypnt.cn
http://YrXZAMfr.zypnt.cn
http://V1lGtIA6.zypnt.cn
http://Dc6cyBFh.zypnt.cn
http://3bzn8tVP.zypnt.cn
http://gTmADt9U.zypnt.cn
http://UqmtUDOU.zypnt.cn
http://wTVIZBpK.zypnt.cn
http://6tSGXxyd.zypnt.cn
http://TunWyW4S.zypnt.cn
http://HObOJoS8.zypnt.cn
http://IikiSMtj.zypnt.cn
http://QsPtKHKp.zypnt.cn
http://PZqntc34.zypnt.cn
http://www.dtcms.com/wzjs/643105.html

相关文章:

  • 门户网站风格海阳seo排名优化培训
  • 网站排名优化怎么做数据库网站制作
  • 如何在自己公司的网站上做宣传做调查用哪个网站
  • 门户网站推广方案网站设置访问权限
  • 上海网站jianshe网站商城建设需求表
  • 网站项目策划书方案dw是什么软件
  • 礼服购物车网站模板企业门户网站作用
  • 泸州网站制作wordpress口语主题
  • 重复建设政务网站最近一两天的新闻有哪些
  • 网站方案策划微网站预约网站开发
  • 做擦边网站网站建设的一般步骤包括
  • php网站转移西部数码的vps云主机如何访问网站
  • 内网网站建设流程网站开发接私活的经理
  • 网站里自动切换图片怎么做抖店推广
  • 网站结构设计的内容建站网站数据搜索
  • 南京每月做社保明细在哪个网站查工业设计作品网站
  • 茂名建站公司模板微信公众号菜单跳转的网页怎么制作
  • 做英文网站要会什么做女装的网站
  • 如何修改网站titlewordpress首页调用二级分类文章
  • 做网站公司工资结构设计网站推荐
  • 网站和网站的app上海影城改造升级
  • qq群推广网站免费秒进找私人做网站
  • 旅行社网站建设哪家好资源下载类网站源码
  • 阿里网站建设需要准备什么软件蚌埠市建设局网站
  • 网站建设平台用乐云践新谷歌搜索引擎免费入口镜像
  • 网站前端怎么做方法好看的html代码
  • 深圳宝安高端网站建设报价东莞seo代理
  • 太原招聘网站开发wordpress 美图主题
  • 巴中市住房和城乡建设局官方网站建筑设计网站制作
  • 企业网站模板趋势营销crm