почему "не равно" с "или" не работает в c# (проверьте, является ли число двоичным)? - PullRequest
0 голосов
/ 26 января 2020

Я действительно не понимаю, почему это не работает. (следует проверить, является ли число двоичным) почему операторы не применяются правильно?

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;
    }
}

Ответы [ 2 ]

2 голосов
/ 26 января 2020

По крайней мере одно выражение на каждой стороне || всегда верно. Таким образом, результат выражения с использованием || всегда равен true.

Вы можете выполнить проверку в одном выражении с помощью ! (не), но это сделает ваш код менее читабельным, поэтому я предлагаю сохранить результат во временной переменной для улучшения читабельности.

Вы можете использовать:

var isZeroOrOne = (num % 10) == 1 || (num % 10) == 0)
if (!isZeroOrOne) 
{
     return false;
}
num /= 10;
0 голосов
/ 27 января 2020

Слишком долго, не будет читать: используйте && вместо || в вашем операторе if.

И для тех, кто хочет знать, почему:

ИЛИ оператор ( ||) возвращает true, когда хотя бы одна сторона равна true. So 100%10=0 и 0!=1 имеют значение true, поэтому весь оператор или оператор вернет значение true, и программа перейдет к вашему оператору if.

Оператор AND (&&) возвращает true только когда обе стороны равны true. 0!=1 - true, но 0!=0 - false, поэтому оператор && вернет false, а ваш if не будет выполнен.

Понятно?

...