考虑以下情况:
我有2个常量MAX和MIN
我得到一个新数字x
现在要检查x是否在给定范围内,我会这样做:
if(x >= MIN && X <= MAX)
{
//Some logic
}
我想知道是否有更好的方法来谈论效率。我知道这是一个非常简单的任务,但我只是好奇是否有更好的方法。
首先,这是一个典型的微优化案例,几乎从不会产生回报。
话虽如此,唯一的“优化”方法是,如果您事先知道其中一个比较很可能会产生false
,那么将该比较放在第一位,以利用boolean short-circuit evaluation。
if (x >= MIN && x <= MAX) { ... } // most efficient if x >= MIN is hardly ever true
if (x <= MAX && x >= MIN) { ... } // most efficient if x <= MAX is hardly ever true
如果两者比较都是不可预测的,那么我们所有人都浪费了时间...
if (x >= MIN && x <= MAX) { ... } // 如果 x >= MIN 大多数情况下为真,则最有效
这样它就可以在第一次比较中通过,而无需评估逻辑 And 运算符。 - Mrinal Kamboj&&
中,false
会导致短路:false && whatever == false
。 - Peter B如果您知道最小值将为0(您想排除所有负数),则可以将if语句简化为
if (max <= (uint)x)
>=
和<=
进行比较之外还有更高效的方法吗?你为什么关心这个问题? - Tim Schmelter