问题描述
今天在写游戏的时候,有这么一个需求:
我需要根据一个标示符的值,标示符的值一般都是用这样的数值来表示:
如用(1 << 2) 这个来标示一个可以被渲染的对象, (1 << 3) 来标示一个可以进行碰撞的对象,诸如此类的。
所以,我需要根据上面的标示符来获取上面标示符中哪一位为1?
也就是说,对于(1 << 2) 这个值, 它的第2位为1(从下标为0开始计算)。
算法设计
对于这样的一个算法问题,很容易想到,对每一个位使用逻辑运算来判断下,这样就能够简单的获取到哪一位为1了。
对,采用这样的方法,在算法设计上,称为蛮力法。蛮力法是一个问题的最直接,最容易想到,也是最标准的做法了。但是,由于游戏的效率问题,我这个函数要频繁的调用,所以我想将它稍微的提高一下效率。
最近浏览了下《算法设计与分析基础》,大体的内容没有仔细的看,只是简单的浏览了下,设计算法时的几种有效工具,以及他们的思想。
所以,我一下就想到,使用分治法来设计这个算法。
下面算法的概要描述:
我们假设,这个标示符,使用64位无符号整形来表示,那么,我们每一次将这个值折半,也就是说,将64位分为两个部分