So che possono essere addizionati e sottratti, ma non sono sicuro di poterli moltiplicare.
So che possono essere addizionati e sottratti, ma non sono sicuro di poterli moltiplicare.
Per quanto riguarda l'hardware, la moltiplicazione non firmata e la moltiplicazione con segno sono esattamente gli stessi (ignorando i flag). Quando moltiplichi 11111111
e 11111111
, il risultato è 00000001
, indipendentemente dal fatto che gli input siano considerati come -1 o 255.
Detto questo, non so se le due operazioni avrebbero un effetto diverso sui flag di carry e overflow e su come si gestirà la differenza in caso affermativo.
Can unsigned and signed (two's complement) multiplication be performed on the same hardware?
Assumi una larghezza di bit N
.
Il trucco è che l'hardware può fare una firma N+1
* N+1
di moltiplicazione ampia, riutilizzando quindi la maggior parte dell'hardware quando si fa non firmata * non firmata , firmata * firmata o moltiplicazione con segno misto.
Complemento a 2 N+1
gli operandi possono gestire l'intero intervallo di intN_t
e uintN_t
.
Il prodotto finale 2 2*N + 1
può semplicemente salvare i bit desiderati in una destinazione 2*N
.