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.