Come sarebbe un computer rappresentare una base negativa dieci in bit?

1

In che modo un computer rappresenta -6886707 utilizzando 24 bit?

Ho bisogno in qualche modo di verificare questo: 10010110111010110010001.

Per prima cosa ho convertito 6886707 in binario, che è 11010010001010100110011. Poi ho inserito uno zero a sinistra per avere 24 bit, poi ho cambiato gli zeri in uno e uno in zeri e aggiunto 1.

    
posta lmc 22.10.2016 - 19:23
fonte

1 risposta

5

Il complemento a 2 modo per esprimere -6886707 usando 24 bit è, secondo:

         100101101110101011001101 <- you
         100101101110101011001101 <- exploringbinary.com
 ‭11111111100101101110101011001101‬ <- win10 calculator in Programmer-DWORD (32 bit) mode 

La calcolatrice di win10 è d'accordo con te. Semplicemente non ha una modalità a 24 bit. Elimina gli 8 bit extra e ottieni 24 bit corrispondenti. Questi extra 1 provengono da qualcosa chiamato estensione del segno .

Quindi non hai sbagliato i calcoli matematici. Capovolgere i bit e aggiungere 1 è esattamente come fare la negazione del complemento a due.

Non fidarti di tutti i convertitori binari di base 10 per fare il complemento a 2. exploringbinary.com lo fa, come ho confermato con un test di -1. -1 dovrebbe darti 1 in ogni bit.

Tuttavia, binaryhexconverter.com non e google no. Fanno bene i numeri positivi, ma non fidarti di loro con i tuoi negativi.

Seguendo i passaggi:

 Base 10   24 bits in Base 2

 6886707 = ‭011010010001010100110011  
                                    Not (flip the bits)
-6886708 = ‭100101101110101011001100
                                    Add 1
-6886707 = ‭100101101110101011001101‬
                                    Negate (change sign ±)
 6886707 = ‭011010010001010100110011  

Aggiungi siamo tornati dove abbiamo iniziato. Per quanto posso dire che la tua matematica va bene.

La lezione del complemento a 2 è che le due operazioni: Not e Add 1 eseguite per dare lo stesso risultato di Negate .

Funziona anche in questo modo:

 Base 10   Base 2 in 24 bits

-6886707 = ‭100101101110101011001101‬
                                    Not (flip the bits)
 ‭‭6886706‬ = 011010010001010100110010‬
                                    Add 1
 6886707 = ‭011010010001010100110011‬
                                    Negate (change sign ±)
-6886707 = ‭100101101110101011001101‬

Ha detto in un modo di composizione più funzionale:

Negate(x) == AddOne(BitWiseNot(x)) is always true.  

Il che significa che puoi usare un bit per bit e un'aggiunta per definire la negazione.

Tieni presente che 100101101110101011001101 è uguale a -6886707 quando lo prendi come firmato. Quando non lo fai è 9890509.

    
risposta data 22.10.2016 - 19:58
fonte

Leggi altre domande sui tag