Приоритет операции приведения в C # - PullRequest
7 голосов
/ 29 марта 2012

Будут ли существенные различия в C # значимы?

int a, b;
double result;
result = (double)a / b;
result = a / (double)b;
result = (double)a / (double)b;

Какой из них вы используете?

Ответы [ 3 ]

10 голосов
/ 29 марта 2012

Приведение произойдет до деления.

В ваших примерах не имеет значения, какой вы делаете, как если бы один операнд был двойным, среда выполнения также приведёт / преобразует другой в двойное число.

Это похоже на микрооптимизацию - не то, о чем стоит беспокоиться или иметь дело, если только измерения не показывают, что это действительно узкое место.

2 голосов
/ 29 марта 2012

Я делаю это:

result = (double)a / (double)b;

Это может быть совершенно ненужным, но обычно я хочу сделать уверенным , что оно не будет выполнять целочисленное деление, и мне все равнопомнить конкретные правила для этого сценария, чтобы было проще (если еще несколько нажатий клавиш) быть явным.

1 голос
/ 18 апреля 2016

Я делаю (double)a / b, потому что я представляю, что int - это нечто неделимое, как камень или что-то в этом роде.Когда удваивается, это становится делимым, как пирог.Вы можете разделить 3.0 торта на четыре части, но вы не можете разделить три камня на 4.0 части.Или что-то.Есть ли смысл?

...