Galleria mappe mentale Capitolo 2 Rappresentazione e funzionamento dei dati
Questa è una mappa mentale sulla rappresentazione e il funzionamento dei dati nel Capitolo 2, inclusi sistema numerico e codifica, metodi operativi e circuiti operativi, rappresentazione e funzionamento dei numeri in virgola mobile, ecc.
Modificato alle 2024-01-16 15:53:26Questa è una mappa mentale su una breve storia del tempo. "Una breve storia del tempo" è un'opera scientifica popolare con un'influenza di vasta portata. Non solo introduce i concetti di base della cosmologia e della relatività, ma discute anche dei buchi neri e dell'espansione dell'universo. questioni scientifiche all’avanguardia come l’inflazione e la teoria delle stringhe.
Dopo aver letto "Il coraggio di essere antipatico", "Il coraggio di essere antipatico" è un libro filosofico che vale la pena leggere. Può aiutare le persone a comprendere meglio se stesse, a comprendere gli altri e a trovare modi per ottenere la vera felicità.
"Il coraggio di essere antipatico" non solo analizza le cause profonde di vari problemi nella vita, ma fornisce anche contromisure corrispondenti per aiutare i lettori a comprendere meglio se stessi e le relazioni interpersonali e come applicare la teoria psicologica di Adler nella vita quotidiana.
Questa è una mappa mentale su una breve storia del tempo. "Una breve storia del tempo" è un'opera scientifica popolare con un'influenza di vasta portata. Non solo introduce i concetti di base della cosmologia e della relatività, ma discute anche dei buchi neri e dell'espansione dell'universo. questioni scientifiche all’avanguardia come l’inflazione e la teoria delle stringhe.
Dopo aver letto "Il coraggio di essere antipatico", "Il coraggio di essere antipatico" è un libro filosofico che vale la pena leggere. Può aiutare le persone a comprendere meglio se stesse, a comprendere gli altri e a trovare modi per ottenere la vera felicità.
"Il coraggio di essere antipatico" non solo analizza le cause profonde di vari problemi nella vita, ma fornisce anche contromisure corrispondenti per aiutare i lettori a comprendere meglio se stessi e le relazioni interpersonali e come applicare la teoria psicologica di Adler nella vita quotidiana.
Capitolo 2 Rappresentazione e funzionamento dei dati
Rappresentazione dei dati e operazioni
Sistema numerico e codifica
Conversione tra diversi numeri di base
Converti il numero decimale in un numero base arbitrario
Metodo della divisione per base e resto (conversione della parte intera)
Metodo di arrotondamento della base della moltiplicazione (conversione della parte decimale)
Pensa insieme alle formule di rappresentazione numerica dei numeri in base r invece di memorizzarli a memoria.
Codice originale, codice complementare, codice inverso, codice frame
Rappresentazione del codice originale
Il bit di segno dei numeri positivi è rappresentato da 0, il bit di segno dei numeri negativi è rappresentato da 1 e il bit di valore rimane invariato.
rappresentazione complementare
Due modi per trovare il complemento di un numero negativo
Metodo del codice del complemento: quando x ≤ 0, il bit del segno è 1, il bit dei dati del complemento è uguale al bit dei dati del valore reale, che viene invertito bit per bit e l'ultimo bit viene aggiunto di uno. Questo metodo può essere dimostrato Confrontando il complemento e le formule del complemento.
Metodo di scansione: quando x ≤ 0, il bit di segno è 1 e i bit di dati del valore reale vengono scansionati in sequenza da destra a sinistra. Il primo 1 da destra e lo 0 a destra rimangono invariati e i bit rimanenti vengono negati.
la propria notazione in complemento
Il bit del segno è lo stesso del codice originale. Quando il valore vero è un numero positivo, il codice complemento è lo stesso del codice originale; quando il valore vero è un numero negativo, il bit del valore del codice complemento è l'inversione del bit del valore vero.
notazione frameshift
Il frameshift e il complemento di un valore vero differiscono solo di un bit di segno.
intervallo di rappresentazione dei numeri in virgola fissa
Metodi aritmetici e circuiti aritmetici
operatore
Unità Aritmetico Logica (ALU)
ALUop è il terminale di controllo operativo, utilizzato per determinare le funzioni di elaborazione eseguite dall'ALU.
principi interni
Tutti i circuiti di operazioni logiche e aritmetiche vengono eseguiti contemporaneamente e più risultati di operazioni vengono inviati rispettivamente all'estremità di ingresso del multiplexer e AluOp seleziona una delle uscite dei risultati.
La struttura di base dell'operatore
Operatore con struttura a bus singolo
Per evitare conflitti di dati, sul bus può essere trasmesso solo un dato alla volta, ma l'ALU ha due operandi. Per questo motivo è necessario impostare due registri buffer, LA e LB, all'estremità di ingresso dell'ALU.
Sono necessari 3 cicli di clock per completare l'operazione dei due operandi del registro di uso generale e riscrivere il risultato
Nel primo ciclo di clock, l'operando del registro generale viene inviato a LA. È necessario fornire i segnali Ri→ IB1, IB1 → LA. Quando arriva il trigger del clock, l'azione di invio dell'operando a LA è completata.
Il secondo ciclo di clock deve completare l'operazione di invio di un altro operando del registro generale in LB e devono essere forniti i segnali Ri→ IB1, IB1 → LB.
Il terzo ciclo di clock richiede il segnale di controllo di selezione operazione AluOp e il segnale di controllo di riscrittura generale del registro IB1 → Ri.
Operatore con struttura a doppio bus
Per evitare che i risultati di uscita di ALU vengano inviati direttamente al bus IB1 e causino conflitti di dati, un registro buffer L è impostato tra l'uscita di ALU e il bus IB1 per memorizzare temporaneamente i risultati dell'operazione.
Sono necessari due cicli di clock per completare l'operazione
Il primo ciclo di clock fornisce i segnali Ri→ IB1 e Ri→ IB2 per emettere rispettivamente i due operandi del registro. Allo stesso tempo, il segnale di controllo del funzionamento dell'ALU AluOp viene fornito per controllare i dati per eseguire le operazioni corrette i risultati verranno scritti automaticamente nel buffer nel registro L.
Il secondo ciclo di clock invia i dati in L al bus IB1, fornendo segnali L → IB1, IB1 → Ri e, con la cooperazione del segnale di clock, i dati vengono riscritti nel registro generale.
Operatore con struttura a tre bus
Lo scopo del bypass è trasferire i dati tra registri di uso generale senza passare attraverso l'ALU.
La struttura a tre bus può fornire simultaneamente segnali Ri→ IB1, Ri→ IB2, AluOp, IB3 → Ri e completare l'operazione con la cooperazione di cicli di clock. L'intera operazione richiede solo un ciclo di clock.
La velocità è la più elevata tra le tre strutture e non richiede registri buffer, ma il file di registro generale deve fornire due porte di lettura e una porta di scrittura.
Operazioni di spostamento a punto fisso
spostamento aritmetico
L'oggetto dello spostamento aritmetico è un numero con segno e il bit del segno rimane invariato durante il processo di spostamento.
Lo spostamento di un bit a sinistra equivale a moltiplicare per 2 se non si verifica alcun overflow.
Spostare di una posizione a destra equivale a dividere per 2 se non si tiene conto dell'ultima cifra arrotondata a causa dello spostamento.
Il segno di uno spostamento aritmetico rimane sempre invariato!
La condizione di giudizio di overflow dell'operazione di spostamento aritmetico è: lo spostamento aritmetico a sinistra del codice originale si sposta di 1, oppure lo spostamento aritmetico a sinistra del complemento sposta il bit con il segno opposto.
spostamento logico
Gli spostamenti logici trattano gli operandi come numeri senza segno.
Regole di spostamento: quando la logica si sposta a sinistra, il bit alto viene spostato e il bit basso viene aggiunto di 0; quando la logica viene spostata a destra, il bit basso viene spostato e il bit alto viene aggiunto di 0;
spostamento circolare
Addizione e sottrazione di numeri in virgola fissa
Operazioni di addizione e sottrazione in complemento a due
Aggiungere n inverter all'estremità di ingresso Y del sommatore originale per realizzare la funzione di inversione di ciascun bit, quindi aggiungere un multiplexer 2 a 1, controllato da un terminale di controllo Sub, per selezionare il codice originale Y da inserire nel sommatore. Oppure invertire ciascun bit di Y e immetterlo nel sommatore e inviare contemporaneamente il terminale di controllo Sub al sommatore come riporto di bit basso.
Rilevamento del traboccamento L'overflow è possibile solo quando si sommano due numeri con lo stesso segno.
(1) Rileva in base alla coerenza del bit di segno dell'operando e del risultato dell'operazione.
Trabocca quando il positivo diventa negativo e il negativo diventa positivo.
(2) Rileva in base alla coerenza del riporto del bit di dati più alto e del bit di segno durante l'operazione.
Quando il riporto del bit di dati più alto non è coerente con il riporto del bit di segno durante l'operazione, il risultato dell'operazione va in overflow.
(3) Utilizzare bit con doppio segno
Il bit di segno più alto rappresenta il segno effettivo.
Esempio di overflow di operazione in linguaggio C
Operazioni di moltiplicazione e divisione in virgola fissa
Moltiplicazione a virgola fissa
Moltiplicazione di un bit del codice originale
Moltiplicazione del complemento a uno (algoritmo di Booth)
Operazione di divisione a virgola fissa
Operazione di divisione del codice originale (il metodo del resto non viene ripristinato)
Operazione di divisione in complemento a due (metodo di addizione e sottrazione alternata)
Tipi interi e conversione di tipo in linguaggio C
Conversione di numeri con segno e senza segno
I valori dei bit rimangono invariati, cambia solo il modo in cui i bit vengono interpretati.
Conversione tra numeri interi di diversa lunghezza di parola
Quando una variabile di lunghezza di parola grande viene forzata a digitare in una variabile di lunghezza di parola piccola, il sistema tronca direttamente i bit alti ridondanti e assegna direttamente i bit bassi.
Quando si converte da una parola di lunghezza breve a una di parola lunga, non solo i valori dei bit corrispondenti devono essere equalizzati, ma anche la parte di ordine superiore deve essere espansa.
Se il numero originale è un intero senza segno, viene esteso con zero e le parti di ordine superiore dopo l'estensione vengono riempite con 0.
Altrimenti, viene eseguita l'estensione del segno e la parte estesa di ordine superiore viene riempita con il bit del segno del numero originale.
L'essenza è l'espansione dei segni del codice complementare
Archiviazione e organizzazione dei dati
Memorizzazione dei dati "big endian" e "little endian".
Il numero macchina di una variabile di tipo int i è 01 23 45 67H, il suo byte più significativo MSB=01H e il suo byte meno significativo LSB=67H.
I dati vengono archiviati in modo "allineato ai confini".
allineamento dei confini
Confini non allineati
Non esiste alcun problema di allineamento dei confini per i dati di una lunghezza di un byte
Rappresentazione e operazioni dei numeri in virgola mobile
Rappresentazione dei numeri in virgola mobile
Normalizzazione dei numeri in virgola mobile
Regola della mano sinistra: quando la cifra più alta della mantissa del risultato dell'operazione non è una cifra significativa, cioè nella forma di ±0.0…0x…x, è necessaria la regola della mano sinistra. Nella regola della mano sinistra, ogni volta che la mantissa viene spostata di una posizione a sinistra, il codice dell'esponente viene diminuito di 1 (quando la base è 2). Potrebbe essere necessario eseguire più volte la regola di sinistra.
Calcolo da destra: quando la cifra significativa della mantissa del risultato dell'operazione precede la virgola decimale, è richiesto il calcolo da destra. Sposta la mantissa a destra di una posizione e aggiungi 1 all'esponente (quando la base è 2). Quando devi regolare la giusta direzione, devi farlo solo una volta.
Norma IEEE754
Addizione e sottrazione IEEE754 di numeri in virgola mobile
(1) Nel processo di normalizzazione della somma dell'ordine, l'operazione del codice dell'ordine adotta le regole operative di addizione e sottrazione del frame shifting.
"I piccoli passi dovrebbero essere allineati con i grandi passi"
(2) L'operazione della mantissa adotta le regole operative del codice originale e i bit nascosti devono partecipare all'operazione della mantissa.
(3) I bit nascosti partecipano al giudizio di normalizzazione della mantissa e al processo di normalizzazione della mantissa.
Se la mantissa ha la forma di 1......, è una mantissa standardizzata.
Se la mantissa ha la forma di 1×.…, deve essere normalizzata una volta a destra, ovvero la mantissa viene spostata a destra di una posizione e il codice dell'esponente viene aumentato di 1.
Se la mantissa ha la forma di 0..., è necessario normalizzarla a sinistra, spostare la mantissa a sinistra e spostare la mantissa a sinistra di 1 bit ogni volta e allo stesso tempo ridurre l'esponente per 1, fino a quando la mantissa avrà la forma di 1...
(4) Elaborazione dell'arrotondamento, esistono principalmente i seguenti metodi di arrotondamento in IEEE754.
L'ultimo bit è sempre impostato sul metodo 1: finché uno dei bit persi a causa dello spostamento è 1, il bit più basso del risultato dell'operazione viene impostato su 1, indipendentemente dal fatto che il bit più basso fosse originariamente 0 o 1.
Metodo di arrotondamento 0-1: quando la cifra più alta della cifra mancante è 1, aggiungere 1 all'ultima cifra della mantissa, in modo simile all'arrotondamento dei numeri decimali.
Metodo di troncamento: intercetta direttamente il numero di cifre richiesto e scarta tutte le cifre successive Questo processo di arrotondamento è il più semplice.
(5) Giudizio di overflow.
L'overflow delle operazioni in virgola mobile può essere giudicato dall'overflow del codice dell'esponente. Per i numeri a virgola mobile a precisione singola IEEE754, l'overflow della normalizzazione si verifica quando la normalizzazione a destra fa sì che l'esponente sia tutto 1 (ovvero 11111111, il valore vero è 128). L'underflow della normalizzazione si verifica quando la normalizzazione a sinistra fa sì che l'esponente sia tutto zero.
Per le operazioni in virgola mobile, quando l'esponente va in overflow, significa che il risultato dell'operazione va in overflow.
Operazioni che potrebbero causare overflow
Arrotondamento a destra e a mantissa. Quando si arrotonda una mantissa molto grande, potrebbe verificarsi un overflow della mantissa a causa dell'aggiunta di 1 all'ultima cifra. In questo caso, è necessario regolare la mantissa e ordinare tramite la regola della mano destra. Aumentando l'ordine di 1 sul lato destro si aumenta l'ordine, quindi è necessario determinare se si è verificato un overflow esponenziale.
Regola della sinistra. Quando la regola di sinistra diminuisce l'ordine di 1, l'ordine diminuisce, quindi è necessario determinare se si è verificato un underflow esponenziale. La regola di giudizio è simile a quella dell'overflow dell'indice Se si gira a sinistra una volta, il codice dell'esponente viene ridotto di 1, quindi viene valutato se il codice dell'esponente è tutto 0 per determinare se l'esponente è in underflow.
Overflow e underflow dell'indice
Se un indice positivo supera il valore massimo consentito (127 o 1023), si verifica un overflow dell'indice e si verifica un'eccezione.
Se un esponente negativo supera il valore minimo consentito (-126 o -1022), si verifica un underflow dell'esponente e il risultato viene solitamente trattato come zero macchina.
Tipo a virgola mobile nel linguaggio C
Conversione forzata del tipo tra int, float e double
doppio→flottante
Potrebbe verificarsi un overflow durante la conversione di numeri di grandi dimensioni e potrebbe verificarsi un arrotondamento durante la conversione di numeri ad alta precisione.
float/doppio→int
La parte decimale verrà arrotondata e i numeri grandi potrebbero eccedere durante la conversione.
fluttuante→raddoppia
Poiché la mantissa e la larghezza dell'esponente dei dati di tipo double sono maggiori di quelle del tipo float, il relativo intervallo di rappresentazione è maggiore e la precisione è maggiore. I dati di tipo double convertiti sono completamente uguali ai dati di tipo float originali.
int→float
Entrambi i tipi sono a 32 bit e il numero di stati che rappresentano è lo stesso. I dati rappresentati dai due sull'asse dei numeri non si sovrappongono completamente.
Il tipo float utilizza parte del suo stato per rappresentare numeri interi e decimali più grandi. Alcuni numeri interi relativamente grandi nel tipo int non possono essere rappresentati accuratamente dal tipo float.
La mantissa di un numero a virgola mobile ha un totale di 24 bit inclusi i bit nascosti. Quando i 24~31 bit di dati int sono diversi da 0, non possono essere convertiti accuratamente nella mantissa di un numero a virgola mobile a 24 bit tempo, si verificherà un overflow di precisione e sarà necessaria l'elaborazione dell'arrotondamento.
int→doppio
Il campo mantissa dei numeri in virgola mobile è di 53 bit e può rappresentare accuratamente tutti gli interi a 32 bit.