2016-12-17 2 views
-1

Я наткнулся на вопрос об арифметическом приоритете в тесте, и я не могу обернуть голову вокруг своего ответа.C арифметический приоритет

float x = 5 % 3 * + 2 - 4.5/5 * 2 + 2; 

Мое «понимание» прямо сейчас, что умножение должно происходить первое перед делением и модулем, но когда я пытаюсь использовать этот подход, ответ 6,55 вместо 4,20. Я попытался сыграть с выражением (добавление скобок здесь и там), и получается, что 5% 3 происходит сначала перед всем остальным. Я просто не понимаю, почему, поскольку в соответствии с таблицей приоритетов я был предоставлен, это не должно быть так. Может ли кто-нибудь прояснить это для меня?

+1

Как это работает? У вас есть '* +', и между ними не на что работать. Кто-то, пожалуйста, помогите мне понять. – user902384

+0

Если у вас есть оператор с одинаковым приоритетом, первый будет первым обрабатываться. –

+1

@Shiv, что + является унарным оператором на 2, который следует. – sh1

ответ

2

Обратитесь к documentation here.

Превалирование операторов умножения, деления и останова выше, чем у сумм и вычитаний.

Если операторы умножения, деления или остатка идут один за другим, то они равны связанным слева, что означает, что они будут выполняться один за другим в данном порядке.

В вашем примере сначала выполняется 5 % 3, затем умножение (на любое число), затем деление 4.5/5, затем умножение результата на 2 и только после того, как будет выполнена сумма и вычитание.

1

Ваш код C:

x = 5 % 3 * + 2 - 4.5/5 * 2 + 2; 

Во-первых, унарный плюс и унарный минус имеет наивысший приоритет:

x = 5 % 3 * (+ 2) - 4.5/5 * 2 + 2; 

Во-вторых, умножение, деление и остаток имеют одинаковый приоритет, связанный слева вправо:

x = ((5 % 3) * (+ 2)) - ((4.5/5) * 2) + 2; 

Последнее, сложение и вычитание имеют одинаковый приоритет, связанный f ром слева направо:

x = ((((5 % 3) * (+ 2)) - ((4.5/5) * 2)) + 2); 

Теперь мы оцениваем выражение:

x = (((2 * (+ 2)) - ((4.5/5) * 2)) + 2); 
x = (((2 * 2) - ((4.5/5) * 2)) + 2); 
x = ((4 - ((4.5/5) * 2)) + 2); 
x = ((4 - (0.9 * 2)) + 2); 
x = ((4 - 1.8) + 2); 
x = (2.2 + 2); 
x = 4.2; 
Смежные вопросы