Successivo: Costanti come espressioni regolari, Precedente: Costanti scalari, Su: Costanti [Contenuti][Indice]
In awk
, tutti i numeri sono espressi nel sistema decimale (cioè a
base 10).
Molti altri linguaggi di programmazione consentono di specificare i numeri in
altre basi, spesso in ottale (base 8) e in esadecimale (base 16).
Nel sistema ottale i numeri hanno la sequenza 0, 1, 2, 3, 4, 5, 6, 7, 10, 11,
12, e così via. Come ‘11’ decimale è una volta 10 più 1, così
‘11’ ottale è una volta 8 più 1. Questo equivale a 9 nel sistema decimale.
Nell’esadecimale ci sono 16 cifre. Poiché l’usuale sistema numerico decimale
ha solo dieci cifre (‘0’–‘9’), le lettere da
‘a’ a ‘f’ rappresentano le cifre ulteriori.
(normalmente è irrilevante se le lettere sono maiuscole o minuscole; gli
esadecimali ‘a’ e ‘A’ hanno lo stesso valore).
Così, ‘11’ esadecimale è 1 volta 16 più 1,
il che equivale a 17 decimale.
Guardando solamente un ‘11’ puro e semplice, non si capisce in quale base sia. Così, in C, C++, e in altri linguaggi derivati da C, c’è una speciale notazione per esprimere la base. I numeri ottali iniziano con uno ‘0’, e i numeri esadecimali iniziano con uno ‘0x’ o ‘0X’:
11
Valore decimale 11
011
11 ottale, valore decimale 9
0x11
11 esadecimale, valore decimale 17
Quest’esempio mostra le differenze:
$ gawk 'BEGIN { printf "%d, %d, %d\n", 011, 11, 0x11 }' -| 9, 11, 17
Poter usare costanti ottali ed esadecimali nei propri programmi è molto utile quando si lavora con dati che non possono essere rappresentati convenientemente come caratteri o come numeri regolari, come i dati binari di vario tipo.
gawk
permette l’uso di costanti ottali ed esadecimali nel testo di
un programma. Comunque, se numeri non-decimali sono presenti tra i dati in
input, essi non sono trattati in maniera speciale; trattarli in modo speciale
per default significherebbe che vecchi programmi awk
produrrebbero
risultati errati.
(Se si vuole che i numeri siano trattati in maniera speciale, si deve
specificare l’opzione da riga di comando
--non-decimal-data;
vedi la sezione Consentire dati di input non decimali.)
Se si devono gestire dati ottali o esadecimali,
si può usare la funzione strtonum()
(vedi la sezione Funzioni di manipolazione di stringhe)
per convertire i dati in numeri.
La maggior parte delle volte, le costanti ottali o esadecimali si usano quando
si lavora con le funzioni predefinite di manipolazione di bit;
si veda Funzioni per operazioni di manipolazione bit
per maggiori informazioni.
Diversamente da alcune tra le prime implementazioni di C, ‘8’ e ‘9’
non sono cifre valide nelle costanti ottali. Per esempio, gawk
tratta ‘018’ come un 18 decimale:
$ gawk 'BEGIN { print "021 è", 021 ; print 018 }' -| 021 è 17 -| 18
Le costanti ottali ed esadecimali nel codice sorgente sono un’estensione di
gawk
. Se gawk
è in modalità compatibile
(vedi la sezione Opzioni sulla riga di comando),
non sono disponibili.
La base di una costante non influisce sul suo valore
Una volta che una costante numerica è stata
convertita internamente in un numero [decimale],
$ gawk 'BEGIN { printf "0x11 vale <%s>\n", 0x11 }' -| 0x11 vale <17> |
Successivo: Costanti come espressioni regolari, Precedente: Costanti scalari, Su: Costanti [Contenuti][Indice]