[an error occurred while processing this directive] [an error occurred while processing this directive]
Виноват, еще есть описка - исправлено/дополнено здесь.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Black Eagle 24 января 2002 г. 20:09
В ответ на: Объясните, пожалуйста, элементарное:операции умножения отправлено Ант-в 24 января 2002 г. 13:26

Существуют строгие договоренности о способах представления знаковых и беззнаковых данных при помощи ресурсов с фиксированной битовой длиной - байт (8 бит), слов (16 бит) и т.д. Возьмем, к примеру, байт, и по своему усмотрению будем рассматривать (назначать) его то как емкость (ресурс) для хранения беззнаковых величин, то как то же для знаковых:

Байт, назначенный беззнаковым, представит числа 0..127..255 значениями 00..7F..FF. Исчерпаны все 256 возможных состояний, диапазон представления чисел тоже максимально возможный.

Байт, назначенный знаковым, представит числа -128..-1..0..+127 значениями 80..FF..00..7F. Также исчерпаны все 256 возможных состояний, диапазон представления чисел тоже максимален, но этим байтом уже нельзя представить числа от +128 до +255, как в беззнаковом варианте.

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

Остальное - следствие из вышеприведенного:

- умножение без- на беззнаковое - (0..255)*(0..255)=(0..65025), результат следует считать беззнаковым.

- умножение без- на знаковое - (0..255)*(-128..+127)=(-32640..+32385), результат следует считать знаковым.

- умножение знакового на знаковое - (-128..+127)*(-128..+127)=(-16256..+16384), результат следует считать знаковым. Максимальный положительный результат получится от перемножения максимальных (по модулю) отрицательных операндов.

Частичное умножение (FMUL, FMULS, FMULSU для AVR) Вы поняли правильно, хоть и назвали его дробным. Эта группа команд позволяет экономить по 2 цикла в каждом грамотном случае своего применения вместо MULxx к арифметике с плавающей запятой.

Удачи!

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

Ответы



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

E-mail: info@telesys.ru