重写代码以删除条件语句

时间:2015-11-05 20:59:56

标签: c#

是否可以重写以下内容以使其不包含任何条件语句?我认为使用像按位操作这样的东西可能会有一些聪明的伎俩吗?

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可能是一个非常大的数字。还有另一种方式吗?

4 个答案:

答案 0 :(得分:2)

你去吧

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

说明:

  
    

r = 2 - b,<对于b> = 3

,0(即高位设置)          

r>> 31,= -1表示b> = 3,否则为

  

答案 1 :(得分:1)

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

最快的可能是按位操作往往非常快

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

?:运营商。 (但它包含条件陈述。)

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

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

是否可以重写以下内容以使其不包含任何条件语句?

不可能让它无处可去。你必须以任何方式检查这个条件。没有魔力。

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