weixin_44579584 2022-08-14 21:11 采纳率: 100%
浏览 20
已结题

有没有优化范围判断的方式呢

问题遇到的现象和发生背景

关于if中范围判断的代码,有时候需要判断一个数在某几个区间中,我们要写成

if((num>x &&num<y)  || (num>m &&num<n))

这样写会影响效率吗,如果区间再多一些呢

我想要达到的结果

有没有优化范围判断的方式呢

  • 写回答

1条回答 默认 最新

  • bostonAlen 2022-08-14 21:18
    关注
    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月22日
  • 已采纳回答 8月14日
  • 修改了问题 8月14日
  • 创建了问题 8月14日