关于if中范围判断的代码,有时候需要判断一个数在某几个区间中,我们要写成
if((num>x &&num<y) || (num>m &&num<n))
这样写会影响效率吗,如果区间再多一些呢
有没有优化范围判断的方式呢
if (j >= min && j <= max)
存在的两次分支判断,可以减少为一次,,多个空间则类似,写成:
if ((int32_t)((j - min) | (max - j)) >= 0)
进一步多个变量范围判断还可以继续优化成,注意下面都是无符号整数:
if ( ( (x - minx) | (maxx - x) | (y - miny) | (maxy - y) ) >= 0)
让四次判断减少为 1 次判断,这背后的道理很简单,当范围是变量时,多算两次减法完全不影响,但是多一两次判断,对性能的影响是很大的
https://godbolt.org/z/eN_GK-
链接:https://zhuanlan.zhihu.com/p/147039093
————————————————
版权声明:本文为CSDN博主「bostonAlen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BostonRayAlen/article/details/120529131