我正在寻找一种有效的方法来确定在整数中设置的最低有效位的位置,例如对于0x0FF0,它将是4.
这是一个简单的实现:
unsigned GetLowestBitPos(unsigned value)
{
assert(value != 0); // handled separately
unsigned pos = 0;
while (!(value & 1))
{
value >>= 1;
++pos;
}
return pos;
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何挤出一些周期?
(注意:这个问题适合喜欢这类事情的人,而不是人们告诉我xyzoptimization是邪恶的.)
[编辑] 感谢大家的想法!我也学到了其他一些东西.凉!
这个问题的动机是我最近开始看到的有点过于if..else if..else结构的东西.虽然它很简单并且有其用途,但它的一些东西不断告诉我它可以用更精细,优雅和通常更容易保持最新的东西代替.
为了尽可能具体,这就是我的意思:
if (i == 1) {
doOne();
} else if (i == 2) {
doTwo();
} else if (i == 3) {
doThree();
} else {
doNone();
}
Run Code Online (Sandbox Code Playgroud)
我可以想到两种简单的方法来重写它,或者通过三元(这只是编写相同结构的另一种方式):
(i == 1) ? doOne() :
(i == 2) ? doTwo() :
(i == 3) ? doThree() : doNone();
Run Code Online (Sandbox Code Playgroud)
或使用Map(在Java中,我认为在C#中)或字典或任何其他K/V结构,如下所示:
public interface IFunctor() {
void call();
}
public class OneFunctor implemets IFunctor() {
void call() {
ref.doOne();
}
}
/* etc. */
Map<Integer, IFunctor> methods = new …Run Code Online (Sandbox Code Playgroud) 多态如何在循环中替换if-else语句或Switch?特别是它总能取代if-else?我在循环中使用的大多数if-thens都是算术比较.这个问题是从这个问题中产生的.
int x;
int y;
int z;
while (x > y)
{
if (x < z)
{
x = z;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用多态?
注意:我用Java编写了这个,但我对任何OOL感兴趣.