Studio l'informatica e apprendo l'estensione del segno. Mi chiedo: l'estensione del segno e il riempimento si riferiscono alla stessa tecnica?
Studio l'informatica e apprendo l'estensione del segno. Mi chiedo: l'estensione del segno e il riempimento si riferiscono alla stessa tecnica?
Il riempimento è un termine generico che significa riempire lo spazio inutilizzato con qualche schema. Esistono diversi metodi di riempimento, a seconda del contesto esatto in cui viene utilizzato, ad esempio negli spazi di crittografia, il riempimento spesso include un campo di lunghezza per garantire che sia possibile determinare la dimensione originale prima del riempimento.
L'estensione del segno è un metodo utilizzato per convertire un intero binario con segno di una determinata dimensione (in forma di complemento a due, che è il metodo più comune di memorizzazione di tali numeri interi) in un numero intero con segno più grande. Il processo è aggiungere nuovi bit a sinistra duplicando il bit più a sinistra; Ad esempio, per i numeri negativi il valore viene riempito con 1s e per i numeri positivi viene riempito con 0, il che si tradurrà nello stesso valore originale che viene mantenuto nel nuovo formato.
Gli interi senza segno sono aumentati di dimensione usando "zero extension", che usa sempre 0 bit.
Questo può essere visto come riempimento se si desidera visualizzarlo in termini di utilizzo dello spazio disponibile, ma in realtà penso che "la conversione del formato" sia un modo più naturale di pensare all'operazione.
Sto assumendo una rappresentazione a complemento a due di interi con segno.
Ad esempio, prendi un int8_t{-1}
. È rappresentato come 1111'1111
, poiché il complemento a due può essere calcolato come (in termini semplici):
0000'0001
) 1111'1110
) 1111'1111
) Eseguiamo sign-extend a int16_t
. Quindi, 1111'1111
diventa 1111'1111'1111'1111
. È ancora un -1
- il valore non è cambiato, solo la larghezza lo ha fatto.
Facciamo pad (con zeri) a int16_t
. Quindi 1111'1111
diventa 0000'0000'1111'1111
. È non a -1
- il valore ha modificato a causa del pad.
Per gli interi non firmati non c'è differenza tra l'estensione del segno e il padding (l'estensione sing non ha senso, perché è nessun segno). Per gli interi firmati c'è comunque un mondo di differenze.
Leggi altre domande sui tag terminology