ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
17 августа
1303238 Топик полностью
RxTx (21.04.2023 23:38, просмотров: 128) ответил Dingo на Как перемножаются целые числа со знаком? Вот есть два числа 32-бит со знаком. Перемножили. Получили какой-то число в пределах sint64; Старший бит - XOR от знаковых бит. В исходных информацию о величине несли 31 бит в каждом, то есть 31+31=62 бита. Можно ли считать, что "пред-старший" бит дублирует знаковый? К чему вопрос: А если я захочу умножить знаковые 24бит и 8 бит - они поместятся в 32 разряда? PS: можно передвинуть в ПЛИС-раздел,
1. Если перемножить два числа (24-бит-со-наком и 8-бит-со-знаком) в дополнительном коде с дополнением до двойки (two's complement, обычное представление в современных процессорах) результат умножения совершенно точно поместится в 32-бит-со-знаком, сомнений тут никаких. Т.е. s24 * s8 = s32 (гарантированно). 

2. "В исходных информацию о величине несли 31 бит в каждом, то есть 31+31=62 бита." Если перемножать так, что знаки перемножаются отдельно, затем перемножаются модули чисел, то достаточно умножения модулей: 31*31.

3. "Можно ли считать, что "пред-старший" бит дублирует знаковый?" Или не понял вопрос, или нет, это не так для чисел в доп. коде. с дополнением до двух.

4. Есть вариант умножения методом сложение-сдвиг, в котором знак анализируется только у одного операнда. У операнда добавляемого к сумме частичных произведений знак не анализируется (и биты не анализируются тоже) - если знак операнда был отрицательный, то сложение естественным образом превращается в вычитание. Второй трюк заключается в том что сдвигаемое частичное произведение со знаком может находиться в том же регистре что и сдвигаемый множитель.

Спасибо, князь. Вы настоящий дворянин. И программист.