是否可以重写以下内容以使其不包含任何条件语句?我认为使用像按位操作这样的东西可能会有一些聪明的伎俩吗?
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
可能是一个非常大的数字。还有另一种方式吗?
答案 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);
是否可以重写以下内容以使其不包含任何条件语句?
不可能让它无处可去。你必须以任何方式检查这个条件。没有魔力。
如果你想通过删除这个条件让你的程序更快,那么你选择了错误的方法。这是微观优化。