2015-08-27 2 views
0
printf("%d", 7 - 9 % 4 * 2); 

У меня есть 3 в качестве отпечатанного ответа, но ответ был 5. Может ли кто-нибудь сказать мне, почему я получил это неправильно?C базовый код: Таблица приоритета/ассоциативности

+0

я получаю 5, как ожидается, , Вы уверены, что в вашей программе нет ничего другого? –

+0

сравнить: http://goo.gl/8enkEU –

+0

это было написано на тесте, и я пытаюсь выяснить, почему моя логика была неправильной, когда я ее взял. – okbuthow

ответ

4

Умножение, деление и модуль имеют одинаковый приоритет, и все они имеют более высокий приоритет, чем сложение и вычитание. Если два оператора имеют одинаковый приоритет, они (в большинстве случаев) оцениваются слева направо.

Таким образом, выражение эффективно выглядит следующим образом:

7 - ((9 % 4) * 2) 

Что дает:

7 - ((9 % 4) * 2) = 7 - (1 * 2) = 7 - 2 = 5 

Вы, вероятно, сделал деление вместо модуля:

7 - ((9/4) * 2) = 7 - (2 * 2) = 7 - 4 = 3 
+0

awesome, спасибо! просто понял, что я разделил вместо использования модуля – okbuthow

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