Conversione del sistema numerica

-3

Perché non possiamo convertire direttamente il numero ottale in base 8 in base esadecimale 16 direttamente? Possiamo convertire in ottale convertendolo prima in equivalente binario o convertendolo in equivalente decimale. Ma perché non possiamo convertire direttamente la base 8 ottale in base 16 esadecimale?

    
posta Zero001 02.10.2018 - 07:18
fonte

5 risposte

4

Puoi, dividendolo successivamente per 020, come fai in decimale. Di ', hai 0137357 (omettendo il prefisso per brevità da questo punto):

137357 / 20 = 5756 remainder 17 = 0xf
5756   / 20 =  276 remainder 16 = 0xe
276    / 20 =   13 remainder 16 = 0xe
13 < 20, so highest digit is      0xb
0xbeef
    
risposta data 02.10.2018 - 07:45
fonte
3

Puoi eseguire direttamente questa conversione, ma rendi conto che ottale, esadecimale e decimale sono proprietà di stringhe di caratteri quando le loro sequenze di cifre vengono interpretate come numeri. Quindi una rappresentazione ottale non è un efficiente motivo per memorizzare un numero; e mentre hex è migliore, è ancora lontano dall'essere efficiente quanto il meccanismo nativo di memorizzazione dei numeri.

Internamente per la CPU, i numeri interi (ad es. 32-bit, 64-bit, altri) sono solo numeri. Il processore li memorizzerà come numeri usando bit binari, ma questo non è molto significativo per questa discussione. Ciò che è significativo è la dimensione fissa rispetto alla dimensione variabile e la memoria nativa dei numeri rispetto alla loro rappresentazione in stringhe di caratteri.

    
risposta data 02.10.2018 - 07:45
fonte
0

È possibile convertire direttamente da ottale a esadecimale. Come soluzione di forza bruta, creare una tabella di ricerca a 12 bit, indicizzare in quella con quattro cifre ottali, estrarre tre cifre esadecimali. Esistono altre soluzioni meno intensive nello spazio.

    
risposta data 02.10.2018 - 07:46
fonte
0

Probabilmente, hai in mente qualcosa come le seguenti linee di codice (scrivendo in Java, ma sarà simile in altre lingue):

String octalText = "1357";
int value = Integer.parseInt(text, 8);
String hexText = Integer.toString(value, 16);

E sì, è un processo in due fasi, converte da una rappresentazione di testo in base-8 "1357" del numero 751 al valore interno della macchina, e quindi in una seconda fase dal modulo interno alla base- 16 modulo di testo "2ef".

Per le conversioni tra le basi numeriche, questo è il modo standard per farlo. Naturalmente, è possibile scrivere funzioni che effettuano la conversione in una sola chiamata:

String convertBase(String textIn, int baseIn, int baseOut)

ma nel caso generale, la conversione dei sistemi numerici implica un sacco di calcoli e il calcolo avviene nel modo più efficiente all'interno della macchina, così efficacemente farà qualcosa di molto simile al processo in due fasi internamente.

In alcuni casi speciali, una conversione in forma di testo può essere eseguita in modo più efficiente rispetto ai numeri interni della macchina e, per la conversione da base 8 a base 16, l'approccio alla tabella di ricerca menzionato da Kendall sembra promettente .

    
risposta data 02.10.2018 - 21:22
fonte
0

Che cosa intendi con direttamente?

Puoi sempre convertire direttamente un numero di qualsiasi base in un numero di qualsiasi altra base.

Ad esempio, un numero composto da n cifre Dn ... D1 in base B ha un valore numerico di Dn*B^(n-1) + ...+ D0*B^0 . È quindi possibile convertirlo in un numero di base C con una successione di divisione modulo e intero.

Intendevi conversione banale, senza calcolo?

Quindi non può essere fatto direttamente. Non c'è una semplice trasposizione, perché ottale è base 8 = 2 ^ 3, quindi ogni cifra è rappresentata in 3 bit e l'esadecimale è base 16 = 2 ^ 4, quindi ogni cifra corrisponde a 4 bit. Quindi i bit nella rappresentazione binaria del numero sono raggruppati in modo diverso.

Prendiamo l'esempio

octal:                               7   6   3 
octal grouping, group of 3:        111 110 011 
hexa grouping, group of 4:     0001 1111  0011
hexadecimal:                      1    F     3

È necessario raggruppare 4 cifre ottali per ottenere 3 cifre esadecimali.

Se hai 1 o 2 cifre ottali, è molto semplice:

  • Una singola cifra ottale converte direttamente nella stessa cifra esadecimale. per esempio. %codice%
  • se la prima cifra è anche dividerla per 2 e prendere la seconda cifra così com'è: 63 - > 0x33
  • se la prima cifra è dispari, sottrarre 1 e dividere per 2, ma aggiungere 8 alla seconda cifra e per il valore tra 10 e 15 sostituirla con A a F: 3 -> 0x3

Con una terza e una quarta cifra, la matematica è dolorosa, e IMHO il modo più veloce è trasporre l'ottale in binario, riorganizzare di 4 bit e trasporre in hexa.

    
risposta data 04.10.2018 - 01:10
fonte

Leggi altre domande sui tag