Così i computer utilizzano il complemento a due per rappresentare internamente interi con segno. I.e, -5 è rappresentato come^5 + 1 = "1111 1011".Golang: complemento a due e fmt.Printf
Tuttavia, provare a stampare la rappresentazione binaria, ad es. il seguente codice:
var i int8 = -5
fmt.Printf("%b", i)
Uscite -101
. Non proprio quello che mi aspetterei. La formattazione è diversa o non usa il complemento di Due, dopo tutto?
È interessante notare che la conversione in un unsigned int risultati nella stringa di bit "corretto":
var u uint8 = uint(i)
fmt.Printf("%b", u)
uscita è 11111011
- esattamente il complemento 2s di -5
.
Quindi mi sembra che il valore sia internamente l'utilizzo del complemento a due, ma la formattazione è la stampa del 5
senza firma e la preposizione di -
.
Qualcuno può chiarirlo?
Non so perché qualcuno lo consideri "strano". Indipendentemente dalla base numerica utilizzata, un numero negativo è ancora negativo. Se lo chiedeste nella base 8, 12 o 16 mi aspetterei la stessa cosa. –
Beh, non ho detto strano. Stavo solo cercando di capire il complemento a 2 e i risultati non erano quello che mi aspettavo. – joerx
Non penso che tu possa davvero sperare di capire il complemento di 2 giocando con una funzione di formattazione dei numeri scritta in un linguaggio di alto livello. –