Differenza tra estensione del segno e padding

0

Studio l'informatica e apprendo l'estensione del segno. Mi chiedo: l'estensione del segno e il riempimento si riferiscono alla stessa tecnica?

    
posta Niklas Rosencrantz 09.03.2018 - 09:15
fonte

2 risposte

5

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.

    
risposta data 09.03.2018 - 09:54
fonte
1

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):

  • prendi la rappresentazione senza segno ( 0000'0001 )
  • inverti tutti i bit ( 1111'1110 )
  • aggiungi uno ( 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.

    
risposta data 09.03.2018 - 09:55
fonte

Leggi altre domande sui tag