算法设计:如何求出一个64位数中哪一位是‘1’

问题描述

            今天在写游戏的时候,有这么一个需求:

            我需要根据一个标示符的值,标示符的值一般都是用这样的数值来表示:

             如用(1 << 2) 这个来标示一个可以被渲染的对象, (1 << 3) 来标示一个可以进行碰撞的对象,诸如此类的。

             所以,我需要根据上面的标示符来获取上面标示符中哪一位为1?

             也就是说,对于(1 << 2) 这个值, 它的第2位为1(从下标为0开始计算)。


算法设计

            对于这样的一个算法问题,很容易想到,对每一个位使用逻辑运算来判断下,这样就能够简单的获取到哪一位为1了。

           对,采用这样的方法,在算法设计上,称为蛮力法。蛮力法是一个问题的最直接,最容易想到,也是最标准的做法了。但是,由于游戏的效率问题,我这个函数要频繁的调用,所以我想将它稍微的提高一下效率。

           最近浏览了下《算法设计与分析基础》,大体的内容没有仔细的看,只是简单的浏览了下,设计算法时的几种有效工具,以及他们的思想。

           所以,我一下就想到,使用分治法来设计这个算法。

           下面算法的概要描述:

           我们假设,这个标示符,使用64位无符号整形来表示,那么,我们每一次将这个值折半,也就是说,将64位分为两个部分

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值