关于c#:重写代码以删除条件语句


Re-writing code to remove conditional statements

是否可以重新编写以下内容,使其不包含任何条件语句?我想可能有一些巧妙的技巧,比如位运算?

1
2
3
4
5
6
7
8
9
10
int a = // some value
int b = // some other value between 0 and max int
if(b >= 3)
{
    return a + 1;
}
else
{
    return a;
}

编辑:要明确一点,我不是在寻找一种删除条件的通用方法。我正在寻找一个技巧来从这个非常具体的代码中删除条件。把它当作一个学术难题。

举个例子,删除条件(在某些情况下会产生性能提升)的一种方法是预先计算一个查找表,并使用b将其索引到该表中。在这种特殊情况下,这是很棘手的,因为b可能是一个非常大的数字。还有别的办法吗?


干得好

1
return a - ((2 - b) >> 31);

说明:

r = 2 - b, < 0 (i.e. high bit set) for b >= 3

r >> 31, = -1 for b >= 3, 0 otherwise

< /块引用>


1
2
3
4
uint a = // some value
uint b = // some other value between 0 and max int
bool c = b & 0xFFFC
return a + Convert.ToInt32(c);

最快的可能是位运算速度非常快

1
2
3
uint a = // some value
uint b = // some other value between 0 and max int
return (b & 0xFFFC) ? a+1 : a;


?:运算符。(但它包含条件语句。)

1
return b >= 3 ? a + 1 : a;

1
return a + (b >= 3 ? 1 : 0);

Is it possible to re-write the following so that it doesn't contain any conditional statements?

不可能在哪里解决问题。你必须以任何方式检查这种情况。没有魔法。

如果您想通过删除这个条件使程序更快,那么您选择了错误的方法。这是微观优化。


你可以通过这样做来改善它:

1
2
3
int a = // some value
int b = // some other value between 0 and max int
return (b >= 3) ? (a+1) : a;