C#中两个数 快速范围判断

逛知乎的时候看到一个C语言技巧的答案,觉得他的代码写得挺有意思,就想用C#试试。

如果我们要判断一个值在不在范围内,通常都是:

 if (x >= min && x < max)
        {
            return true;
        }
        return false;

想了一下,在实际情况中,好像确实没有用到已知函数直接判断,都是写的If判断。

1、如果 int 检测是 大于等于0, 小于等于max 的话,可以直接使用uint来判断:

 if ((uint)x < max)
        {
            return true;
        }
        return false;

这个很好理解,如果x是一个负数,那转成uint越界,变成一个很大的正数。

2、如果int检查的最小值不是0,可以用位运算来判断:

 if (((x - min) | (max - x)) > 0)
        {
            return true;
        }
        return false;

第一个 (x - minx) 如果 x < minx 的话,得到的结果 < 0 ,即高位为 1,第二个判断同理,如果超过范围,高位也为 1,两个条件进行比特或运算以后,只有两个高位都是 0 ,结果才会大于等于0。

在C#上验证了一下,觉得这个方法可行。至于性能什么的,没有去一一验证,总感觉这样写的人要帅些。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值