美文网首页
2020-06-16

2020-06-16

作者: 不文不武的禾文 | 来源:发表于2020-06-16 23:37 被阅读0次

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

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

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

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

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

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

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

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

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

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

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

相关文章

  • 2020-06-18

    2020-06-16 2020-06-15 2020-06-14 2020-06-12 2020-06-10 ‘夫...

  • 2020-06-19

    2020-06-18 2020-06-16 2020-06-15 2020-06-14 2020-06-12 20...

  • 2020-06-22

    2020-06-21 2020-06-20 2020-06-19 2020-06-18 2020-06-16 20...

  • 2020-06-20

    2020-06-19 2020-06-18 2020-06-16 2020-06-15 2020-06-14 20...

  • 2020-06-21

    2020-06-20 2020-06-19 2020-06-18 2020-06-16 2020-06-15 20...

  • 重装VMware后断网

    2020-06-16 重装VMware后外网不能正常连接虚拟机 2020-06-17 最终的原因还是:Window...

  • 日拱一卒,持续精进

    【姓名】老盖 【时间】2020-06-16 【今日全情工作】 半日工作也快乐! 【今日认真生活】 接送90分钟...

  • MySQL 常用命令

    记录时间:2020-06-16命令环境为wsl 即 win系统中Ubuntu子系统,命令在Linux服务器上也生效...

  • 【D175】爱自己是根本——写作营共读打卡第142天《非暴力沟通

    2020-06-16,周二,晴 今天阅读《非暴力沟通》第九章。 Day142《爱自己是根本》 ——写作营第142天...

  • [R] 遇到的安装问题

    安装包 2020-06-16 在测试maftools的时候,发现使用的版本太旧了,记录一下新版本的安装方法以及遇到...

网友评论

      本文标题:2020-06-16

      本文链接:https://www.haomeiwen.com/subject/tyndxktx.html