Ну давайте разберемся.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 25 ноября 2004 г. 10:08
В ответ на: Как правильно пользоваться преобразованием типов данных в Си отправлено radioman 25 ноября 2004 г. 08:16

Ваше выражение
Resalt=(int)((Long)A*(Long)B*(Long)C)/(D-Long(C));
Переменная Resalt целого типа, значит преобразование long в int происходит автоматически, явно указывать нет необходимости.
Resalt=Long)A*(Long)B*(Long)C/(D-Long(C);
Далее, в выражении встречается операция, где операнды имеют разные типы, в таких случаях происходит автоматическое преобразование типа переменных к старшему типу (в данном случае long), поэтому явное преобразование типа можно опустить. Перепишем выражение еще раз
Resalt=(Long)A*(Long)B*(Long)C/(D-C);
Наконец, операция умножения происходит с данными типа int, и стало быть возможно переполнение. Надо привести тип операции к типу long, для этого достаточно сделать ЯВНОЕ преобразование типа ТОЛЬКО ДЛЯ ОДНОГО операнда:
Resalt=(Long)A*B*C/(D-C);
Такой должна быть самая краткая форма записи выражения, которое будет выполняться корректно.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru