Приоритет операторов в C#

Рейтинг: 0Ответов: 2Опубликовано: 17.03.2015

Добрый день!

        // Использовать запятые в операторе цикла for для
        // выявления наименьшего и наибольшего делителя числа,
        // не считая само число и единицу.

        int i, j;
        int smallest, largest;
        int num;

        num = 12;

        smallest = largest = 1;

        for (i = 2, j = num/2; (i <= num/2) & (j >= 2); i++, j--) 
        {

// Вот здесь не могу понять, какая часть условия выполняется первой,
// эта (smallest == 1) & (num % i), а затем результат == 0 или по другому?

            if ((smallest == 1) & (num % i) == 0)
            {
                smallest = i;
            }

            if ((largest == 1) & (num % j) == 0)
            {
                largest = j;
            }
        }
        Console.WriteLine("The largest  Divisor: " + largest);
        Console.WriteLine("The smallest Divisor: " + smallest);

Ответы

▲ 3Принят

Вы ошибаетесь. Ваше условие стоит разбивать не на части (smallest == 1) & (num % i) и результат == 0, а по-другому. Оно состоит из таких частей:

(smallest == 1)

и

(num % i) == 0

Здесь имеются три оператора: ==, & и %, а также скобки. Сначала выполнится условие smallest == 1, затем num % i, затем (num % i) == 0, и самой последней будет осуществлена операция &. поскольку у нее самый низкий приоритет из всех вышеперечисленных. О порядке вычисления можно судить если заменить операнды на методы или свойства, выводящие данные на консоль. Скажем так:

public static int j
{
    get
    {
        Console.WriteLine("j");
        return 10;
    }
}

public static int num
{
    get
    {
        Console.WriteLine("num");
        return 10;
    }
}

public static int i
{
    get
    {
        Console.WriteLine("i");
        return 10;
    }
}

public static int foo
{
    get
    {
        Console.WriteLine("foo");
        return 10;
    }
}

static void Main(string[] args)
{       
    if (smallest == j & num % i == foo)
    {

    }
    Console.ReadLine();
}

Вы получите следующий вывод:

smallest
j
num
i
foo

Что говорит о том, что сначала вычисляется выражение smallest == j, затем num % i, затем num % i == foo и в конце - оператор &

▲ 1

Гуглится за полминуты: http://sernam.ru/book_csharp.php?id=32