为什么 "not equal" 和 "or" 在 c# 中不起作用(检查数字是否为二进制)?

why does "not equal" with "or" doesn't working in c# (check if number is binary)?

我真的不明白为什么它不起作用。 (它应该检查数字是否为二进制) 为什么运算符不适用?

using System;
class MainClass
{
    public static void Main(string[] args)
    {

        Console.WriteLine(IsBin(100));
        Console.WriteLine(IsBin(10011012));
        Console.WriteLine(IsBin(10911010));

    }

    public static bool IsBin(long num)
    {
        while (num > 0)
        {
            if ((num % 10) != 1 || (num % 10) != 0)
            {
                return false;
            }
            num /= 10;
        }

        return true;
    }
}

|| 的每一侧至少有一个表达式始终为真。所以使用 || 的表达式的结果始终为真。

您可以使用 !(不是)检查一个表达式,但这会降低您的代码的可读性,因此我建议将结果存储在一个临时变量中以提高可读性。

您可能正在使用:

var isZeroOrOne = (num % 10) == 1 || (num % 10) == 0)
if (!isZeroOrOne) 
{
     return false;
}
num /= 10;

太长,无法阅读:在您的 if 语句中使用 && 而不是 ||

对于那些想知道原因的人:

OR operator(||) returns true 当至少一侧是 true 时。 So 100%10=00!=1 为真,因此整个 or 语句将 return 为真,程序将跳转到您的 if 语句。

AND operator(&&) returnstrue only when both sides are true0!=1 为真,但 0!=0 为假,因此 && 运算符将 return 为假,您的 if 将不会被执行。

清楚了吗?