【问题标题】:Validating an if-condition with bitwise operators使用位运算符验证 if 条件
【发布时间】:2015-04-23 06:46:49
【问题描述】:

我在处理 C# 中的基本 if else 语句时遇到问题。

我有两个 uint 类型的变量。我需要检查第一个变量是否在第二个变量的范围内。此外,第一个变量的值可以为 null。如果我为第一个值设置了一些值,则输出会很好。但是如果我将 null 放在第一个变量中,则所需的输出会失败

我就是这样做的。

using System;

public class Test
{
    public static void Main()
    {
        uint var1 = 0x00000000;
        uint var2 = 0x0ffffffa;
        if (!((var1 == null) || (((var1 != null) && (var1 & var2)) > 0)))
        Console.WriteLine ("no");
        else
        Console.WriteLine ("yes");
    }
}

输出为否时的代码是:

using System;

public class Test
{
    public static void Main()
    {
        uint var1 = 0x00000000;
        uint var2 = 0x0ffffffa;
        if (!(((var1 != null) && ((var1 & var2) > 0)) || (var1 == null)))
        Console.WriteLine ("no");
        else
        Console.WriteLine ("yes");
    }
}

但输出是“否”。我哪里错了?

我想要一个“是”作为输出。我需要检查第一个变量。如果为null则可以,如果不是,则是否在第二个变量的范围内,如果是,则也可以

【问题讨论】:

  • uint 是一个值类型,因此它不能是null。您的 if 语句中有两个冗余条件。
  • 那么我将如何合并 null 值的条件?
  • 您可能想要var1 == 0 而不是var1 == null?或者您必须将 var1 类型更改为 uint? var1 = 0x00000000;
  • 也许this 会让你更清楚。请注意 Sriram 提到的两个警告(即 uint 不能为空)
  • @DmitryBychenko:谢谢。它奏效了。

标签: c# if-statement uint


【解决方案1】:

我对这里的问题感到困惑。您已初始化变量,因此它们不能为空,您使用了 OR 逻辑操作数,因此该语句在计算第一项并发现它为真时将短路。

【讨论】:

  • 我觉得这应该是一个评论。你没有回答问题。
  • 如果问题是为什么返回“否”,那么它就是。
  • 我想要一个“是”作为输出。我需要检查第一个变量。如果为null则可以,如果不是,则是否在第二个变量的范围内,如果是,则也可以。
猜你喜欢
  • 2022-08-02
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 2014-12-11
  • 2019-10-20
  • 2023-03-03
相关资源
最近更新 更多