Perché usare altre basi di numeri durante la programmazione


35

Io e i miei colleghi abbiamo piegato le nostre menti per capire perché qualcuno avrebbe fatto di tutto per programmare i numeri in una base diversa dalla base 10.

Ho suggerito che forse potresti ottimizzare equazioni più lunghe mettendo le variabili nella base corretta con cui stai lavorando (ad esempio, se hai solo set di 5 di qualcosa senza resto potresti usare la base 5), ma non sono sicuro se è vero.

qualche idea?


6
Hai un esempio specifico che ha sollevato questa domanda? Le cose che sono nella base-2 o nella base-16 hanno ovviamente i loro vantaggi poiché è più facile da capire per un computer.
KDiTraglia,

4
Cosa significa "programmazione numeri in base ..."? Ci sono dei numeri Periodo. Sono rappresentati internamente in qualche base, ma per lo più non importa e non cambia alcuna regola aritmetica.

12
@JMD - ti preghiamo di collaborare con i moderatori per rimuovere una delle tue due registrazioni incrociate e inserirne una qui in P.SE. Il cross-posting su tutti i siti è disapprovato. Le mod possono invece migrare domande per te.

10
@JMD - Il cross post non è ancora qualcosa che dovresti fare. Esiste un processo di migrazione per tali domande, se necessario .
Oded,

2
@JMD Non eseguire il cross post, una domanda adatta a più di un sito è estremamente rara. Questa volta, ad esempio, la tua domanda era fuori tema su StackTranslate.it. Ma anche se la tua domanda fosse adatta a entrambi i siti, lo shopping della tua domanda sui siti è generalmente disapprovato. Siamo tutti volontari del nostro tempo qui, avresti potuto aspettare almeno un po 'per valutare le risposte che stavi ottenendo su Stack Overflow prima di effettuare il cross posting.
yannis,

Risposte:


59

La solita ragione per scrivere numeri, in codice, oltre alla base 10, è perché stai manipolando i bit.

Per scegliere un esempio in C (perché se C è buono per qualcosa, è buono per i bit-twiddling), supponiamo che un formato di basso livello codifichi un numero di 2 bit e un numero di 6 bit in un byte xx yyyyyy::

main() {
    unsigned char codevalue = 0x94; // 10 010100
    printf("x=%d, y=%d\n", (codevalue & 0xc0) >> 6, (codevalue & 0x3f));
}

produce

x=2, y=20

In una tale circostanza, scrivere le costanti in esadecimale è meno confuso che scriverle in decimali, perché una cifra esadecimale corrisponde ordinatamente a quattro bit (mezzo byte; un 'nibble') e da due a un byte: il numero 0x3fha tutti i bit impostato nel nibble basso e due bit nel nibble alto.

Puoi anche scrivere quella seconda riga in ottale:

printf("x=%d, y=%d\n", (codevalue & 0300) >> 6, (codevalue & 077));

Qui, ogni cifra corrisponde a un blocco di tre bit. Alcune persone lo trovano più facile da pensare, anche se penso che sia abbastanza raro in questi giorni.


Un altro esempio potrebbe essere l'uso del "numero magico" 0xDEADBEEF. Vedi questo post stackoverflow.com/questions/5907614/0xdeadbeef-vs-null
Etsitpab Nioliv

45

Il motivo principale per cui utilizzo basi diverse è quando mi preoccupo dei bit.

È molto più facile da leggere

int mask=0xFF;
byte bottom_byte = value & mask;

di

int mask=255;
byte bottom_byte = value & mask;

O immagini qualcosa di più complesso

int mask=0xFF00FF00;
int top_bytes_by_word = value & mask;

rispetto a

int mask=4278255360; //can you say magic number!? 
int top_bytes_by_word = value & mask;

È molto chiaro qui quale sia l'intento con gli esempi hex perché hex è fondamentalmente solo una forma più compatta di binario ... Al contrario, base-10 (ciò che usiamo) non si associa altrettanto bene al binario.

0xFF = b11111111 = 255
0xFFFF = b1111111111111111 = 65536
0xF0F0 = b1111000011110000 = 61680

Ci sono anche altre basi che puoi usare in alcune lingue. Troverai pochissimo uso di basi diverse da binarie, esadecimali e decimali. Alcune persone dispari usano ancora ottale, ma questo è il più esoterico che vedrai in un programma sano.


2
L'ottale non è affatto raro, 0 è ottale :) (visto che da qualche parte sulla rete di Stack Exchange, non riesco a trovarlo ora).
Gerrit,

2
@Earlz: persone con molte dita. :-)
Bryan Oakley,

3
26 x 2 + 10 = Tutte le lettere maiuscole e minuscole e tutti i numeri. Non è poi così insolito. Ho anche visto Base 36 usato, che è solo la versione non sensibile al maiuscolo / minuscolo della stessa.
Darrel Hoffman,

3
@vasile: ci sono 60 minuti in un'ora e 60 secondi in un minuto perché le persone stavano usando i sistemi base-60, non viceversa. Spero che tu non creda che ci sia qualcosa in natura che dice che ci devono essere 60 minuti in un'ora!
Joren,

1
sì, l'hanno letto nelle stelle e hanno usato la base 60 per la misurazione del tempo. con 360 giorni (= 6x60) all'anno non è così folle misurare il tempo in base-60.
ytg

8

Come probabilmente saprai, i computer sono basati su binari: questa è la base 2.

È facile convertire tra base 2 e 4, 8 e 16 (e multipli simili di 2), e mantenere questa traduzione nel codice sorgente può semplificare il lavoro con i numeri.

Per linguaggi di basso livello come Assembly e C, ciò può tradursi direttamente in operazioni del processore (spostamento di bit per divisione e moltiplicazione, ad esempio), il che significa che l'utilizzo di queste basi di numeri finisce con un codice molto più veloce.

Inoltre, non tutte le operazioni sono operazioni numeriche - ci sono mappe di bit in cui è necessario manipolare direttamente i bit - l'utilizzo di una base 2 o di uno dei suoi multipli per farlo rende le operazioni molto più semplici.

Se desideri saperne di più, ti consiglio di leggere Codice di Charles Petzold .


3
Il compilatore non se ne frega niente. Sebbene sia davvero più facile convertire tra le basi che elenchi, una semplice conversione (slow-ish) per la base 10 in particolare non è nemmeno difficile, e la maggior parte delle lingue utili per la costruzione del compilatore (per questo non usi assembly) conversione disponibile nella loro libreria standard, quindi è effettivamente gratuito per i compilatori.

1
L'uso dell'esadecimale in C non si traduce in programmi più veloci. Al compilatore non importa quale base usi.
Charles Salvia,

5
Indipendentemente dalla base su cui è scritto il programma, il compilatore lo traduce in binario al momento della compilazione. Le istruzioni di montaggio sono identiche.
Karl Bielefeldt,

2
I computer aziendali sono infatti basati su un bool tri-enery: vero, falso e "file non trovato"
Martin Beckett,


4

Al di fuori di programmi altamente specializzati, è piuttosto raro utilizzare basi diverse da 10, 16 o 2.

La base 16 (esadecimale) è utile semplicemente perché l'intero intervallo di un byte (0-255) può essere rappresentato in due cifre (0x00-0xFF), il che può semplificare molto il lavoro con dump esadecimali non elaborati o dati binari. L'esadecimale è utile anche quando si utilizzano maschere di bit con operatori bit a bit, poiché le cifre da due cifre a una corrispondenza di byte aiutano con la leggibilità.

Più raramente, la base 2 (binaria) può essere utilizzata anche con operazioni bit per bit, ma molti linguaggi di programmazione non supportano i letterali di base 2 e comunque esadecimale è molto più conciso e leggibile.

Base-8 (ottale) viene talvolta utilizzato anche a causa delle autorizzazioni dei file UNIX. A parte questo, è piuttosto raro usare basi diverse da 10 al di fuori di contesti matematici altamente specializzati.


L'ottale viene spesso utilizzato per specificare i valori dei caratteri e talvolta per scaricare i dati binari.
Caleb,

3

Il motivo più comune valido per utilizzare altre basi ha a che fare con la facile conversione in base 2: è banale convertire un numero base-8 o base-16 in binario senza usare una calcolatrice memorizzando una breve tabella di otto o sedici numeri:

 0000 0     0001 1     0010 2     0011 3
 0100 4     0101 5     0110 6     0111 7

 1000 8     1001 9     1010 A     1011 B
 1100 C     1101 D     1110 E     1111 F

Questo apre molteplici possibilità:

  • Quando un numero rappresenta una composizione di numeri binari significativi, è possibile determinare i singoli componenti senza un computer. Ad esempio, se un numero di 24 bit rappresenta un colore in RGB, è banale dire che 0xFF00FFè magenta (rosso + blu); il compito è molto più difficile quando ti viene presentato16711935
  • Quando un numero rappresenta una maschera di bit, è più pratico scriverlo come un numero esadecimale compatto, piuttosto che un numero binario molto più lungo
  • Alcune architetture hanno fatto di tutto per rendere il loro codice binario di facile lettura quando stampato come numeri ottali. PDP-11 era uno di questi sistemi: il bit più significativo ti avrebbe permesso di distinguere le operazioni a 8 bit da quelle a 16 bit; gli ultimi due gruppi ottali ti permetterebbero di dire ai due registri coinvolti nell'operazione, e così via. Conoscevo diverse persone che sapevano leggere il codice binario PDP-11 dallo schermo senza un disassemblatore, ma avevano bisogno che il codice macchina fosse stampato nel sistema ottale.

2

Al computer (o più precisamente al compilatore) non importa davvero quale base numerica usi nel tuo codice sorgente. I linguaggi di programmazione più comunemente usati supportano direttamente le basi 8 (ottale), 10 (decimale) e 16 (esadecimale). Alcuni hanno anche il supporto diretto per i numeri di base 2 (binari). Lingue specializzate possono supportare anche altre basi di numeri. (Per "supporto diretto", intendo dire che consentono l'inserimento di numeri in quella base senza ricorrere a trucchi matematici come lo spostamento dei bit, la moltiplicazione, la divisione ecc. Nel codice sorgente stesso. Ad esempio, C supporta direttamente la base-16 con il suo0xprefisso numerico e il normale set di cifre esadecimali di 0123456789ABCDEF. Ora, questi trucchi possono essere utili per rendere il numero più facile da capire nel contesto, ma finché puoi esprimere lo stesso numero senza di loro, farlo - o no - è solo una comodità.)

Alla fine, tuttavia, ciò è irrilevante. Diciamo che hai una dichiarazione come questa seguente:

int n = 10;

L'intento è quello di creare una variabile intera e inizializzarla con il numero decimale 10. Cosa vede il computer?

i  n  t     n     =     1  0  ;
69 6e 74 20 6e 20 3d 20 31 30 3b (ASCII, hex)

Il compilatore lo tokenizzerà e realizzerà che stai dichiarando una variabile di tipo intcon il nome ne gli assegni un valore iniziale. Ma qual è quel valore?

Al computer e ignorando i problemi di ordinamento e allineamento dei byte, l'input per il valore iniziale della variabile è 0x31 0x30. Questo significa che il valore iniziale è 0x3130 (12592 in base 10)? Ovviamente no. Il parser della lingua deve continuare a leggere il file con la codifica dei caratteri utilizzata, quindi legge 1 0seguito da un terminatore di istruzioni. Poiché in questa lingua si assume la base 10, questa legge (all'indietro) come "0 uno, 1 decine, fine". Cioè, un valore di 10 decimale.

Se abbiamo specificato un valore in esadecimale e la nostra lingua utilizza 0xper specificare che il seguente valore è in esadecimale, otteniamo quanto segue:

i  n  t     n     =     0  x  1  0  ;
69 6e 74 20 6e 20 3d 20 30 78 31 30 3b (ASCII, hex)

Il compilatore vede 0x(0x30 0x78) e lo riconosce come prefisso base-16, quindi cerca un numero base-16 valido che lo segue. Fino al termine dell'istruzione, si legge 10. Questo si traduce in 0 "uni", 1 "sixteens", che funziona a 16 in base 10. O 00010000 in base 2. O comunque ti piacerebbe rappresentarlo.

In entrambi i casi, e ignorando le ottimizzazioni per motivi di semplicità, il compilatore fornisce spazio sufficiente per contenere il valore di una intvariabile di tipo e inserisce il valore letto dal codice sorgente in una sorta di variabile di mantenimento temporanea. Quindi (probabilmente molto più tardi) scrive i valori binari risultanti nel file di codice oggetto.

Come vedi, il modo in cui scrivi i valori numerici nel codice sorgente è completamente irrilevante. Si può avere un lievissimo effetto sui tempi di compilazione, ma immagino che (di nuovo, ignorando tali ottimizzazioni come cache del disco dal sistema operativo) cose come turbolenza casuale attorno ai piatti rotanti del disco, i tempi di accesso al disco, collisioni bus dati , ecc., hanno un effetto molto maggiore.

In conclusione: non preoccuparti. Scrivi i numeri in una base supportata dal tuo linguaggio di programmazione preferito e che abbia senso per come il numero verrà utilizzato e / o letto. Hai trascorso molto più tempo a leggere questa risposta di quanto non riusciresti mai a recuperare nei tempi di compilazione essendo intelligente su quale base numerica usare nel codice sorgente. ;)


1

perché qualcuno dovrebbe fare di tutto per programmare i numeri in una base diversa dalla base 10.

Ecco alcuni motivi che non sono già apparsi ...

x00 - Alcune API di sistemi operativi e dispositivi hardware prevedono che gli argomenti siano in esadecimale / binario. Quando si codifica per tali API, è più semplice utilizzare i numeri nello stesso formato previsto dall'API anziché convertirlo tra basi diverse. Ad esempio, per inviare un byte di fine messaggio a un server o per inviare un messaggio per chiudere una connessione a un canale di comunicazione.

x01 - È possibile che l'applicazione rappresenti caratteri non disponibili su determinate tastiere come il segno di copyright (\ u00a9).

x02 - Per far sì che alcune costanti / valori letterali persistano (visivamente) in diverse impostazioni di cultura, specialmente quando il codice / i file sorgente vengono spostati tra gli sviluppatori con impostazioni locali diverse.

x03 - Per rendere il loro codice confuso e complesso - La cosa buona è che C # non supporta le costanti ottali!


1

Il problema chiave è rappresentare una singola parola delle dimensioni del computer in modo ragionevole. Il 6502 era un processore a 8 bit. Il 4004 era un processore a 4 bit.

Quando si ha a che fare con un numero di 4 o 8 bit funziona bene. Un numero a 4 bit è un singolo carattere esadecimale. Un numero di 8 bit (un byte) è composto da due cifre esadecimali. I sistemi che hanno una potenza di 2 parole di dimensioni sono oggi lo standard comunemente visto: 16 bit, 32 bit, 64 bit. Tutti questi si dividono bene per 4 per essere rappresentati come esadecimali.

Octal (base 8) veniva utilizzato in sistemi in cui la dimensione della parola era 12, 24 o 36. Il PDP8, IBM Mainframe e ICL 1900 dei vecchi tempi li utilizzavano. Queste parole sono state più facilmente rappresentate usando ottetti piuttosto che un intervallo limitato di esadecimali (sì, si dividono anche in 4).

Apparentemente ci fu anche un risparmio sui costi usando la numerazione di base 8. Rappresentando 12 bit in BCD, la prima cifra può essere solo 0-4 ma la seconda, la terza e la quarta possono essere 0-9. Se questo è stato fatto come esadecimale, uno ha 3 caratteri esadecimali, ma ognuno ha 16 possibili valori. Era più economico produrre un tubo nixie che aveva solo 0-7 di uno che aveva 0-9 (con logica aggiuntiva per BCD) o 0-F per esadecimale.

Oggi si vede ancora ottale con permessi per i file unix (755, 644) in cui proprietario, gruppo e mondo hanno ciascuno 3 bit che rappresentano i permessi.


Nel mondo della matematica, a volte si fanno cose strane con basi diverse. Ad esempio, una sequenza debole di Goodstein dal progetto euler 396 ... o qualcosa di più semplice con numeri palindromici . C'è la proprietà di un numero nella base N che un numero che è un multiplo di N - 1 avrà la somma delle sue cifre fino a un multiplo di N - 1 . Inoltre, se N - 1 è un quadrato perfetto, questa proprietà esiste anche per sqrt ( N - 1 ). Ciò ha alcune applicazioni in alcuni problemi matematici.


1
L'ottale era perché il PDP aveva 9 / 18bit byte, un numero ottale rappresenta 3 bit quindi se il tuo byte è divisibile per 3 ha molto senso
Martin Beckett

1
Octal è stato utilizzato anche su alcuni sistemi a 16 bit (in particolare il PDP-11), perché 15 - il numero di bit tranne il bit di segno - si divide in tre. È stato ampiamente utilizzato nel sistema operativo UNIX originale (ad esempio, "od" è lo strumento standard per scaricare i file binari e il suo formato predefinito è ottale a 16 bit anziché esadecimale a 8 bit), non solo per le autorizzazioni. Potrebbe anche essere rilevante che il set di istruzioni PDP-11 avesse due campi di operando a 6 bit.
Casuale 832

Octal è stato utilizzato anche perché all'epoca poteva essere visualizzato sulla tecnologia. Nexi, qualcuno? O altri display 0-9? Ci è voluto un po 'prima che i display AF venissero visualizzati.
Jeremy J Starcher,

1

Nel settore finanziario esiste uno schema identificativo che è effettivamente base 36 . Usa i numeri 0-9 e le lettere BZ per rappresentare le cifre valutate 0-35. Salta le vocali per impedire la generazione di nomi odiosi.

Non è perfetto, tuttavia. C'è stato un tempo in cui una sfortunata compagnia aveva l'ID B000BZ.


1

Motivo n. 1: perché tutti i numeri a livello di circuito sono rappresentati in base 2 (interruttore elettrico acceso o spento). Motivo n. 2: perché a un livello superiore ai circuiti effettivi, i bit sono raggruppati in byte e i byte possono essere facilmente rappresentati come due cifre esadecimali, quando occorrerebbero 3 cifre decimali (e alcune convalide) per rappresentare tutti i possibili valori del byte.

Quindi, se lavori a questi livelli (o approssimandoli, in alcuni ambienti gestiti), è più facile lavorare in binario o esadecimale che decimale. Le situazioni in cui lo faresti sono varie, ma in genere non sono mai situazioni in cui hai solo bisogno dell'aritmetica di base.


1

Un'area in cui i numeri di base 16 (esadecimali) vengono utilizzati molto frequentemente è la specifica del colore, soprattutto quando si utilizza HTML / CSS per il Web. I colori che utilizziamo sui display digitali vengono specificati utilizzando una combinazione di 3 valori di intensità per 3 colori "base" (RGB - rosso, verde, blu) che vengono miscelati insieme per creare uno dei 16 milioni di colori visualizzabili (utilizzando il colore a 24 bit ).

Ad esempio, il verde a piena intensità in esadecimale sarebbe 0x00ff00e 65280in decimale. Ora immagina di provare a mescolare "manualmente" un colore nella tua testa che abbia parti uguali di rosso e blu, diciamo a metà intensità, per creare un bel viola :) In esadecimale questo sarebbe scritto semplicemente come 0x800080se fosse il valore decimale per questo 8388736. Diventa ancora più facile quando si lavora con sfumature di grigio - grigio al 50% è 0x808080(hex) e 8421504(decimale), il 75% è 0xC0C0C0e 12632256, e così via.

L'uso di hex è molto più intuitivo e chiunque abbia familiarità con questo uso del colore sarà immediatamente in grado di "indovinare" il colore semplicemente guardando il valore esadecimale. È anche molto meno soggetto a errori da utilizzare se è necessario utilizzare lo stesso colore più volte (che di solito è il caso).

Controlla qualsiasi pagina web (e in particolare il CSS) per una folle quantità di utilizzo esadecimale: D

NOTA: nei CSS i valori esadecimali vengono scritti utilizzando un #prefisso, ad esempio: #00ff00per il verde, e talvolta viene anche abbreviato in sole tre cifre, ad esempio #0f0per il verde.


0

Per alcuni algoritmi, la base 2 ha più senso di ogni altra cosa. Ad esempio, preferiresti scrivere una funzione per attraversare un albero binario o un albero di 10 ary?

Ma, più frequentemente, viene utilizzata la base 2 perché è così che i computer rappresentano quasi universalmente i loro numeri. Ciò significa che:

  • molte operazioni sono più efficienti in base 2:
    • i poteri di moltiplicazione, divisione e modulo di 2 sono molto più veloci della divisione generale
    • flag e piccoli valori possono essere memorizzati, recuperati e manipolati in modo più efficiente come cifre binarie di un numero maggiore.
  • le operazioni che leggono, scrivono e manipolano i file di dati e i flussi di dati di rete devono affrontare direttamente il fatto che sono rappresentati come numeri binari.

Inoltre, c'è sempre la rara applicazione che richiede intrinsecamente una base dispari che non può essere né 2 né 10.


2
Ovviamente userei un albero di 10 ary. Cos'è questo strano 2personaggio che stai usando?
CodesInChaos,

0

È onestamente una preferenza, se per qualche motivo hai la polidattilia e hai 11 dita o ti piace contare con le dita dei piedi, quindi ti piace lavorare nella base 20 dipende davvero da te. Ma renditi conto che su un argomento di universalità che la maggior parte di noi che ha a che fare con bit e byte su base giornaliera sarà davvero soddisfatto se otteniamo qualcosa che sta facendo manipolazione dei bit nella base 19.

MOTIVI DELLA BASE x

Base 10 - Modello di tutte le nostre cose perché abbiamo 10 cifre di conteggio (i piedi sono strani e puzzolenti, quindi non li usiamo).

Base 2 - I computer lo usano per i bit (on / off), ciò è correlato ai livelli di tensione leggibili che vengono propagati da gate / transistor / condensatori.

Base 8 - Vecchia, indietro quando i computer non erano molto grandi (o indietro quando erano spaziali) questo andava bene per qualcosa o altro (non mi piace un po ')

Base 16 - Buono per mostrare i nibble superiori e inferiori di un byte per la manipolazione dei bit. Questo è super utile nel mondo embedded / fpga / hardware.

BASI NORMALI NEI COMPUTER

Per andare con preferenza, potrei dirti esattamente come "on" è un colore in un valore RGB esadecimale che mi è stato dato, questo di conseguenza può essere rappresentato in un singolo int in hardware e quindi con alcuni turni può essere restituito a me easy-peasy, 1 colore complesso = 1 punto dati adatto per l'elaborazione di immagini di grandi dimensioni con memoria limitata. Confrontalo con una rappresentazione in base 10, potresti aggiungerli tutti e memorizzarli in un numero, ma quale numero è quale, o forse R è il tempo 10000, G è 100 e B è il suo spazio, sono molte operazioni matematiche , di solito le moltiplicazioni costano più cicli di un turno, quindi il tuo prossimo pezzo di dati è già in coda prima di aver terminato l'elaborazione dell'ultimo pezzo, whoops, che non c'è più.

A volte è semplicemente meglio lavorare nella base 2, 8 o 16. Con la maggior parte delle macchine un moltiplicare per 2 è solo un po 'spostato, quelli sono super veloci, lo stesso con una divisione per 2.

Per spiegare ancora di più l'idea di un po 'di twiddling. Ci sono molte volte quando lavoro in un ambiente incorporato che mi serviva per accedere ad una serie di luci, interruttori o altri elementi mappati sui registri.

In questo caso assegnare un intero carattere, byte o int a ciascun interruttore sarebbe sia inefficiente che sciocco, un interruttore o una luce ha 2 posizioni - acceso e spento - perché dovrei assegnare qualcosa che ha fino a 256 posizioni, o 2 ^ 16 posizioni ecc. Ciascuna luce in un array può essere 1 bit adatta 8 o 16 o 32 o 64 o 128 (larghezza del tipo di dati) su una singola parola / registro. L'efficienza dello spazio è necessaria e piuttosto gradita.

Utilizzando qualsiasi cosa che sia base 2 ^ n nella programmazione di cose come la gestione di dati RGB, molti dati di segnale - GPS, audio, ascii, ecc. - è molto più semplice in esadecimale, binario e ottale poiché è così che viene rappresentato nella macchina e si può discernere più facilmente ciò che viene presentato e come manipolarlo.

UTILIZZANDO BASI STRANE

Non c'è efficienza se non si codifica per esso. Vuoi la base 11, devi impostare un tipo di dati per esso e sovraccaricare tutti gli operatori per gestirne la rappresentazione all'utente. Non vedo alcun motivo per cui un sistema che contenga 5 oggetti e che abbia sempre e solo multipli di 5 oggetti debba essere convertito in matematica a cinque oggetti. E inoltre, faresti meglio a pregare che chiunque abbia deciso di scrivere il proprio codice per la base 271 lo abbia documentato bene o potresti dedicare più tempo a comprenderlo di quanto valga la pena creare la base 271 perché tutti gli elementi sono multipli di 271.



0

Sono sorpreso che tutte le altre risposte non abbiano menzionato due usi molto comuni nell'informatica per basi alternative:

  1. Codifica : la codifica Base64 ad esempio è estremamente comune. La codifica interpreta semplicemente una serie di byte come un numero binario di grandi dimensioni (base-2) e converte quel numero in un numero Base64 rappresentato da cifre ASCII.
  2. Compressione : è spesso desiderabile rappresentare un numero binario, decimale o esadecimale in una base più grande per accorciare la rappresentazione. Ad esempio, tutti gli accorciatori di bit come bit.ly lo stanno facendo. Oppure potresti farlo per abbreviare un GUID da utilizzare in un URL.

    - 821F6321-881B-4492-8F84-942186DF059B (base-16 guid) 
    becomes
    - RRIDHW463YD8YXX7MIDI (base-36)
    - 3UFmaWDjj9lifYyuT0 (base-62)
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.