18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!