Как сделать два дополнительных умножения и деление целых чисел?

Я прочитал этот пост о бинарном умножении, используя два дополнения. но мне это не очень понятно. Даже мне трудно понять статью wiki. Я хочу знать, как идти о вычислении умножений отрицательных чисел:

eg: -1 with -7 should give 7.
A 4-bit, 2 complement of -1 is : 1111
A 4-bit, 2 complement of -7 is : 1001

будет полезно пошаговый способ вычисления умножения. Никакой статьи я не встречал разговоры о разделении. Как подойти к этому?

Ответ 1

шаг 1: sign extend оба целых числа в два раза больше бит. Это безопасно, хотя это может не всегда быть необходимым.

for 4-bit --> 1111, you would extend as 1111 1111
for 4-bit --> 0111,you would extend as 0000 0111

шаг 2: сделать элементарное умножение

sep 3: возьмите правильное количество бит результата из наименее значимой части результата.

например: после умножения вы получаете что-то вроде 0010011110, чтобы взять последние 8 бит i.e 10011110

Позвольте мне проиллюстрировать пример, который вы указали: -1 X -7 в 4-битном представлении

         1111 1111        -1
       x 1111 1001     x  -7
      ----------------    ------
          11111111         7
         00000000
        00000000
       11111111
      11111111
     11111111
    11111111
   11111111
   ----------------
1  00000000111       --->  7 (notice the Most significant bit is zer``o)
      --------  (last 8-bits needed) 

вы можете получить более подробную информацию здесь;

для деления: конвертировать в положительный и после вычисления настроить знак. Я оставлю это как упражнение, но вы можете сослаться на эту страницу.

Ответ 2

Хорошо, посмотрим, смогу ли я сделать это достаточно просто для вас.

Два дополнения: IFF (если и только если) у вас есть отрицательное число, сначала положите его в положительную форму. Для простоты все числа будут 6 бит. Предел бит ограничит количество ваших чисел. Кроме того, размер не имеет значения.

Некоторые числа, преобразованные в их положительную двоичную форму -7: 000111 16: 010000 -22: 010110 1: 000001

Теперь для -7 и -23 ТОЛЬКО мы сделаем два дополнения. Поэтому мы переворачиваем биты (1 → 0 & 0 → 1), а затем добавляем один.

 000111
 Goes to the complement + 1
 111000
 +    1
=111001

И для 22

 010110
 Goes to the complement + 1
 101001
+     1
=101010

Затем вы просто добавляете их вместе, как и любой другой номер.

И похоже, что кто-то еще уже рассмотрел часть умножения, поэтому я не буду повторять это.

Ответ 3

кто-нибудь может мне помочь, пожалуйста...

  1. Выполните следующее умножение двух 4-битных чисел, дополняющих 2-е (самый левый бит - знаковый бит), используя улучшенную версию аппаратного обеспечения умножения (рис. 3.5 на стр. 181), и используйте десятичную арифметику для проверки ваших результатов. (1) 0110 (умножение) x 1001 (множитель) (2) 0110 (умножение) x 0111 (множитель)