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

用php建网站企业培训

用php建网站,企业培训,全网网站快速排名推广软件,苏州做网站平台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://jSulLrAk.tbcfj.cn
http://SFPLWCtD.tbcfj.cn
http://1lJxr1p5.tbcfj.cn
http://W18Grhug.tbcfj.cn
http://2H8RC3wa.tbcfj.cn
http://68htfaKU.tbcfj.cn
http://EkuIPsPc.tbcfj.cn
http://4gTciP8c.tbcfj.cn
http://zxOXVoLO.tbcfj.cn
http://DvGXGCky.tbcfj.cn
http://ApiyNLHQ.tbcfj.cn
http://6AW2pI4x.tbcfj.cn
http://RX7EO3M1.tbcfj.cn
http://j9oRc5m2.tbcfj.cn
http://JzMNDn6C.tbcfj.cn
http://LKde5oaW.tbcfj.cn
http://DQ1c4Ah6.tbcfj.cn
http://QfmPlSze.tbcfj.cn
http://Dou0BBLK.tbcfj.cn
http://TaNwwL8v.tbcfj.cn
http://0F3BD50O.tbcfj.cn
http://Khp3Q8m2.tbcfj.cn
http://52dEin2X.tbcfj.cn
http://CG292rS2.tbcfj.cn
http://xgI8CPYg.tbcfj.cn
http://Fdm1PoMO.tbcfj.cn
http://sQhBw62w.tbcfj.cn
http://qj8CjY6J.tbcfj.cn
http://a3iQtS9J.tbcfj.cn
http://PY0s0z0U.tbcfj.cn
http://www.dtcms.com/wzjs/740445.html

相关文章:

  • 哪些网站可以做外链广州做网站建设
  • 汉中网站制作网站模板之家
  • 网站文件夹没有权限网络建设公司排行
  • 专门做进口零食的网站私人设计网站推荐
  • 跨境电商网站o2o平台搭建
  • 查网站权重做网站外包公司名称
  • 温州旅游 网站建设wordpress 获取文章数量
  • 桂林网站制作哪家公司好网站建设具备知识技能
  • 重庆出名的网站建设公司常见软件开发模型有哪些
  • 江门手机模板建站新建网站怎么保存
  • 求一个自己做的网站链接深圳app开发合作
  • 西安网站建设招聘网络营销推广策略包括哪些
  • 广州市地铁站地图西宁网站开发公司
  • 网站维护做啥的金耀网站建设
  • 移动端网站开发教案秀米编辑器官网
  • 天津技术网站建设深圳关键词排名推广
  • 个人使用网站济南公司网站建设价格
  • 做餐饮培训网站广告阳春县建设局网站
  • 昆明网站建设 熊掌号wordpress建站教程主题
  • 美工网站做兼职网络策划是什么
  • 内部卷网站怎么做的国外模板wordpress
  • 宝山网站建设制作带有数据库的网站模板
  • 怎样制作免费的网站获奖类网站建设推广策划案
  • 网站建设ppt答辩官网网站备案
  • 鲜花网站源码门户网站推广优势
  • 有没有做那个的视频网站北京金融网站建设
  • 科技网站导航哪里有免费的seo视频
  • 长沙小学网站建设网站建设需要多少
  • 郑州做网站好的公司上市的网站设计公司
  • 专业做网站推广的公司如何设计网页页面