[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Существуют строгие договоренности о способах представления знаковых и беззнаковых данных при помощи ресурсов с фиксированной битовой длиной - байт (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