Приоритет операторов в программировании на C - PullRequest
1 голос
/ 03 февраля 2012

Я сейчас изучаю программирование на С (мой первый язык программирования).Я немного запутался с приоритетом операторов.Арифметические операторы имеют следующий приоритет.

  1. *
  2. /
  3. %
  4. +
  5. -

Это то, что дано по крайней мере в моей книге.Что меня смущает, так это как я решаю выражения, когда дело доходит до моих теоретических экзаменов?Я пытался решить многие выражения в указанном выше порядке, но не смог получить правильный ответ.

Учитывая следующие определения:

int a = 10, b = 20, c;

Как бы мы решили это выражение?

a + 4/6 * 6/2 

Это пример из моей книги.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2012

Приоритет / и * такой же в C, как и в математике.Проблема в том, что в математике следующие выражения эквивалентны, тогда как в C они могут не быть:

(a/b) * (c/d)
(a/b*c) / d

Они не эквивалентны в C, потому что если a, b, cи d - целые числа, оператор / означает целочисленное деление (оно дает только интегральную часть результата).

Например,

(7/2)*(4/5); //yelds 0, because 4/5 == 0
(7/2*4)/5; //yields 2

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

4 голосов
/ 03 февраля 2012
    a + 4/6 * 6/2 
 = 10 + 4/6 * 6/2
 = 10 + 0*6/2
 = 10 + 0/2
 = 10

Обратите внимание, что 4/6 оценивается как 0, так как используется целочисленное деление.

2 голосов
/ 03 февраля 2012

Одно безопасное реальное решение - всегда использовать круглые скобки ()

...