Я реализую простое (виртуальное) АЛУ и некоторые другие микросхемы (сумматор, умножитель и т.д.).
Я использую представление дополнения 2 для своих чисел.
Для умножения x и y, двух 16-битных чисел, я подумал, что буду использовать сдвиги влево в этих строках (это, конечно, выполняется без фактического цикла):
установить сумму[0..15]=0
установить х'=х
для i=0...15 //(y[0] — младший бит, а y[15] — старший бит)
- add x' to sum if y[i]=1 and shift x' left.
(Это стандартный способ?)
Моя проблема с левыми сдвигами:
Если есть я с.т. x[i]=1, в какой-то момент старший бит x' станет равным 1, и это отрицает его.
Это проблема, поскольку, например, 2 * 2 с использованием вышеописанного метода дает «-4».
Итак, мой фактический вопрос: при сдвиге влево мне также нужно учитывать бит знака?