C# 使用位运算符验证if条件

C# 使用位运算符验证if条件,c#,if-statement,uint,C#,If Statement,Uint,我在处理C#中的基本if-else语句时遇到了一个问题 我有两个uint类型的变量。我需要检查第一个变量是否在第二个变量的范围内。此外,第一个变量的值可以为null。如果我在第一个值中输入了一些值,那么输出会很好。但是如果我在第一个变量中输入null,那么期望的输出就会失败 我是这样做的 using System; public class Test { public static void Main() { uint var1 = 0x00000000;

我在处理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,您使用了OR逻辑操作数,因此语句在计算第一个项并发现它为true时将短路

uint
是一种值类型,因此它不能为
null
。if语句中有两个冗余条件。那么如何合并null值的条件呢?您可能希望
var1==0
而不是
var1==null
?或者您必须将
var1
类型更改为类似
uint的内容?var1=0x00000000可能会让您更清楚。请注意Sriram提到的两个警告(即uint不能为null)@DmitryBychenko:谢谢。我觉得这应该是一个评论。你没有回答这个问题。如果问题是为什么返回“否”,那么它就是。我想要一个“是”作为输出。我需要检查第一个变量。如果为空,则很好;如果不在,则是否在第二个变量的范围内;如果在,则也很好。