Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
7.1.1 Conversione da esadecimale a decimale<br />
Per illustrare la dualità tra il tipochar, il valore intero che esso rappresentano, e l’associazione con<br />
i caratteri ASCII, viene proposto il seguente spezzone di codice, che implementa la conversione<br />
da esadecimale a decimale. La conversione proposta è estremamente inefficiente, in quanto i<br />
caratteri vengono convertiti uno <strong>alla</strong> volta.<br />
int value;<br />
int nextchar(int c)<br />
{<br />
switch(c) {<br />
case ’a’: case ’b’: case ’c’: case ’d: case ’e’: case ’f’:<br />
c = c - ’a’ + 10 + ’0’;<br />
/* fall through */<br />
case ’0’: case ’1’: case ’2’: case ’3’: case ’4’:<br />
case ’5’: case ’6’: case ’7’: case ’8’: case ’9’:<br />
value = value * 10 + c - ’0’;<br />
break;<br />
case ’p’:<br />
printf("%i\n", value); value = 0;<br />
break;<br />
default:<br />
return -1; /* error */<br />
}<br />
return 0;<br />
}<br />
Nell’algoritmo presentato, l’istruzione<br />
c = c - ’a’ + 10 + ’0’;<br />
è necessaria in quanto i caratteri ASCII nel range [ ′ a ′ . . . ′ f ′ ] non sono consecutivi ai caratteri<br />
[ ′ 0 ′ . . . ′ 9 ′ ]. Nel caso il valore del carattere c in ingresso sia nel range [ ′ a ′ . . . ′ f ′ ] delle cifre esadecimali,<br />
assegna a c il valore dei caratteri seguenti al range [ ′ 0 ′ . . . ′ 9 ′ ], in modo che la successiva<br />
istruzione<br />
value = value * 10 + c - ’0’;<br />
possa correttamente calcolare il valore di value moltiplicando <strong>per</strong> 10 il valore corrente, e sommandovi<br />
il valore intero di c dal quale è sottratto lo scostamento della prima cifra ASCII (’0’)<br />
dell’intervallo.<br />
L’istruzione precedente viene eseguita sia nel caso che il valore di c in ingresso sia una lettera<br />
che nel caso sia una cifra, infatti non c’è il break dopo il primo insieme di clausole case.<br />
il valore di c viene modificato dopo essere stato usato <strong>per</strong> la selezione del caso corretto; non<br />
deve stupire, in quanto l’espressione di switch viene valutata una volta sola.<br />
7.2 Tipi a virgola mobile<br />
La specifica delle caratteristiche dei tipi a virgola mobile è soggetta ad uno standard internazionale,<br />
l’IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985).<br />
Un numero a virgola mobile è codificato come segue:<br />
79