ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
17 августа
1303268 Топик полностью
Boвa (22.04.2023 07:41, просмотров: 180) ответил Dingo на Как перемножаются целые числа со знаком? Вот есть два числа 32-бит со знаком. Перемножили. Получили какой-то число в пределах sint64; Старший бит - XOR от знаковых бит. В исходных информацию о величине несли 31 бит в каждом, то есть 31+31=62 бита. Можно ли считать, что "пред-старший" бит дублирует знаковый? К чему вопрос: А если я захочу умножить знаковые 24бит и 8 бит - они поместятся в 32 разряда? PS: можно передвинуть в ПЛИС-раздел,
Поместится ли результат умножения в 30 разрядов? Будет ли дублировать 30 разряд знаковый? Используем известное соотношение модулей |a*b|=|a|*|b| 

Пусть а имеет 24 разряда, b имеет 8 разрядов.
Число со знаком разрядности N укладывается в интервал [-2N-1.. 2N-1-1].
Рассмотрим 4 варианта
1) а = -223 b = -27 a*b = 230
2) а = -223 b = [-27-1..-27-1] |b|<= 27-1 |a*b| <= 223*(27-1) = 230-223

3) а = [-223-1..223-1] |a|<=27 - 1 b = -27 |a*b| <= 27*(223-1) = 230-27

4) а = [-223-1..223-1] |a|<=27-1 b = [-27-1..-27-1] |b|<= 27-1 следовательно |a*b| <= (27-1)*(223-1) = 230-27-223 +1 < 230

Таким образов в случае когда а = -223 b = -27старший бит положителен, а 30 бит равен 1.

В остальных случаях число укладывается в 29 разрядов, а 30 бит равен знаковому.