реклама на сайте
подробности

 
 
> IAR C умножение int x int = long, Странность компилятора, или я что-то не допонимаю
Д_М
сообщение Jun 22 2013, 21:01
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Здравствуйте!
Перенёс код алгоритма, отлизанный при помощи C Builder, на IAR - не работает. После долгих поисков выявил, что когда умножаются два числа int, а частное long, старшие 16 бит частного всегда равны нулю. Когда сделал множителе тоже long всё нормально. Как-то странно. Другие компиляторы наоборот выдают придупреждения, когда разрядность частного не больше, чем разрядность множителей - char/int, или int/long...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mmor
сообщение Dec 9 2013, 13:14
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 22-04-06
Пользователь №: 16 379



Раз уж про умножение задам сюда же вопрос.
микроконтроллер AT90USB128. Среда программирования JAR 4.10. Язык С++.
есть необходимость помножить целое чесло на число с точкой. Задаю тип переменной double - компилятор комплирует программу, и даже результат умножения близок к истинному. Вот только сомнения меня гложут можно ли такую программу в контроллер зашивать? будет ли работать.
Поэтому все переменные оставил int, но умножаю на число с точкой.
Например:B = A*0.8;
Пусть A = 25000
Тогда B получается 20000.
Т. е. вычисляется вполне точно.
Стал смотреть дизасемблер, а там какой то сложный итеративный процесс идет.
Может кто нибудь на словах объяснить что контроллер делает при умножении на число с точкой?

Ну и еще вопрос по умножению целого на целое.
скажем 0A0Bh x 000Ch = 7884h.
При этом дизасемблер показывает, что умножение происходит по такому алгоритму:

(00x0B)+(0Cx0A) - это младший байт
(0Сx0B) - старший байт результата умножения.

Может кто объяснить откуда такой алгоритм взялся?

Сообщение отредактировал mmor - Dec 9 2013, 13:20
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st September 2025 - 14:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016