2014-02-01 3 views
1

В следующем коде:Назначение и Старшинство операторов с

int main() 
{ 
    int x = 2, y = 1; 
    x *= x + y; 
    printf("%d\n", x); 
    return 0; 
} 

Как это операторы старшинство работы? , поскольку * имеет более высокий приоритет, чем +, поэтому я ожидаю, что операция умножения должна быть выполнена сначала, но результат показывает, что он вычисляется как x * = (x + y), поэтому добавление выполняется первым!

Та же путаница в следующем коде:

int main() 
    { 
     int x = 2, y = 2; 
     x /= x/y; 
     printf("%d\n", x); 
     return 0; 
    } 

не знаю, как операторы старшинство будет работать ... Спасибо за тех, кто имеет объяснение.

+0

'* =' и '/ =' - отдельные операторы со своим собственным приоритетом (и ассоциативность) –

+0

Если вы сомневаетесь, замените выражение: x = x * (x + y) и x = x/(х/у). Это сделает код само собой разумеющимся. –

ответ

0

Старшинство операторов по-прежнему то же самое. * имеет более высокий приоритет, чем +. Однако, поскольку вы используете * = вы ожидаете завершения операции сначала перед умножением.

Это в основном то же самое (х + у) * х

0

Учитывая идентификаторы a и b, оператор вида a op= b (где op может быть +, * и т.д.), полностью эквивалентно (a) = (a) op (b), с той лишь разницей, что (a) оценивается только один раз.

Оператор запятой имеет самый низкий приоритет.

Смежные вопросы