Negativo di un numero in notazione esadecimale
Salve, devo trovare il "negativo" di questo indirizzo :
R1=0x80000077
Procedo innanzitutto passando dalla notazione esadecimale a quella binaria tenendo conto
che la parola è a 32 bit, dunque :
R1 in binario --> 1000 0000 0000 0000 0000 0000 0111 0111
Converto tutti i
bit da 0 1 e viceversa
eccetto il primo a dx :
0111 1111 1111 1111 1111 1111 1000 1001
Ritornando alla notazione esadecimale ottengo -R1= 0x7fffff89 ma non è corretto.
Il risultato deve essere il seguente : -R1=0xffffff89 dove sbaglio? Perché il primo bit della sequenza deve essere 1?Devo forzarlo ad 1 perché è il bit che rappresenta il segno negativo? Qualcuno riuscirebbe a spiegarmelo?
Grazie
R1=0x80000077
Procedo innanzitutto passando dalla notazione esadecimale a quella binaria tenendo conto
che la parola è a 32 bit, dunque :
R1 in binario --> 1000 0000 0000 0000 0000 0000 0111 0111
Converto tutti i
bit da 0 1 e viceversa
eccetto il primo a dx :
0111 1111 1111 1111 1111 1111 1000 1001
Ritornando alla notazione esadecimale ottengo -R1= 0x7fffff89 ma non è corretto.
Il risultato deve essere il seguente : -R1=0xffffff89 dove sbaglio? Perché il primo bit della sequenza deve essere 1?Devo forzarlo ad 1 perché è il bit che rappresenta il segno negativo? Qualcuno riuscirebbe a spiegarmelo?
Grazie
Risposte
Non sbagli, la soluzione corretta è quella che hai scritto. Puoi per esempio vederlo eseguendo un codice come il seguente:
Il risultato è
#include <iostream> #include <cstdint> int main() { std::int32_t number = 0x80000077; // Display number std::cout << std::hex << number << std::endl; // Display its 2-complement std::cout << std::hex << -number << std::endl; }
Il risultato è
80000077 7fffff89
Nota che il valore iniziale è negativo, il secondo è positivo.. In particolare, cambiando il codice sopra scrivendo anche il valore decimale ottengo:
-2147483529, 0x80000077 2147483529, 0x7fffff89