2016-02-04 5 views
0

У меня есть эти переменныев C Приведение типов и использование скобок

distance = 945 
speed = 614 

Я хочу, чтобы получить время в часах и минутах, таким образом я делить расстояние/скорость, чтобы получить часы. Теперь, если я хочу минут как целое у меня есть следующий код:

int minutes; 
minutes = (float) (distance%speed)/speed * 60; 

Это выражение дает значение 32 минут, однако, когда я впервые попробовал, я хотел бы сделать код более «читаемым» и я попробовал следующие варианты, которые дали мне-:

minutes = (float) ((distance%speed)/speed * 60); 
minutes = (float) ((distance%speed)/speed ) * 60; 

Обратите внимание, что добавлены круглые скобки и находятся в разных местах, так почему с помощью круглых скобок в местах, которые выглядят хорошо для меня вмешиваться в расчете и устанавливают значение 0 в переменная. Я предполагаю, что это связано с процессом придания типов, но круглые скобки находятся в местах, которые должны прояснить выражение.

У меня есть правильный ответ, и программа работает правильно, но я хочу понять это в будущих случаях, потому что я немного поиграл с круглыми скобками. Спасибо

+2

Чтобы сделать код более удобным для чтения, рассмотрите возможность добавления комментария, чтобы указать единицы измерения расстояния и скорости, или изменить имя переменной: distance_metres, speed_metres_per_sec и т.д. – Kingsley

+0

Почему вы ожидаете бросить следовать дистрибьюторское право? Является ли '1/(2 + 3) == 1/2 + 3'? Этот код не имеет особого смысла. Ваш компилятор должен жаловаться. Прочтите информационную страницу C для некоторых очень полезных советов. И предоставить [mcve]. – Olaf

+0

@Chritian - комментарий Кингсли (добавление единицы) на самом деле очень хорош независимо от ваших фактических имен переменных. – artm

ответ

4

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

Это потому, что дополнительные скобки () аннулирует свой оттенок float в своем 2-м сообщении.

  • В своем первом заявлении:

minutes = (float) (distance%speed)/speed * 60;

Здесь (float) (distance%speed) оценивается первым.

  • Но в своем заявлении 2:

(float) ((distance%speed)/speed * 60);

Ваши дополнительные () причины (distance%speed)/speed * 60 быть оценены первых, таким образом, литой (float) становится неуместным.

Я хотел, чтобы сделать код более «читаемый»

Связанные с «читаемости», добавляя больше скобок здесь, конечно, не поможет, предложение от Кингсли (добавление единицы) является хорошим путь. Например,

int distance_m = 945; 
int speed_kph = 614;