Negativo di un numero in notazione esadecimale

Messaggioda Salvy » 14/03/2023, 14:27

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
Salvy
Average Member
Average Member
 
Messaggio: 442 di 881
Iscritto il: 02/11/2017, 18:57

Re: Negativo di un numero in notazione esadecimale

Messaggioda apatriarca » 14/03/2023, 18:30

Non sbagli, la soluzione corretta è quella che hai scritto. Puoi per esempio vederlo eseguendo un codice come il seguente:
Codice:
#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 è
Codice:
80000077
7fffff89
apatriarca
Moderatore
Moderatore
 
Messaggio: 5713 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Negativo di un numero in notazione esadecimale

Messaggioda apatriarca » 14/03/2023, 18:32

Nota che il valore iniziale è negativo, il secondo è positivo.. In particolare, cambiando il codice sopra scrivendo anche il valore decimale ottengo:
Codice:
-2147483529, 0x80000077
2147483529, 0x7fffff89
apatriarca
Moderatore
Moderatore
 
Messaggio: 5714 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite