Nota bene: tutte e due le sscanf fanno la stessa cosa solo che la prima e` piu` generica perche` funziona anche se la data di input e` del tipo {31-12-1999} grazie al fatto che con %*c salto la lettura di un carattere.
Poi vorrei condividere anche una finezza, forse inutile, ma di certo non fa male:
Invece di moltiplicare per 100 e 10000 coviene utilizzare potenze di 2 al loro posto. In questo caso si puo` usare 2^7 e 2^14 perche` sono i numeri maggiori e piu` vicini di 100 e 10000 rispettivamente.
Come mai questo? Perche` i compilatori sono intelligenti e vedono che moltiplichi per una potenza di due e invece di usare la istruzione MUL usano l'istruzione SHL che e` molto piu` rapida.
Ti faccio capire il perche` con un semplice esempio:
000000011 in binario = 3 in decimale
000000110 in binario = 6 in decimale
000001100 in binario = 12 in decimale
ecc..
se noti sto semplicemente spostando a sinistra i miei 11 (SHL), e questa operazione viene eseguita molto piu` velocemente che una moltiplicazione (MUL).
Ho controllato anche con gcc ed effetivamente lo fa:
Codice sorgente - presumibilmente C/C++ |
...
0x00000000004006bf <+178>: shl eax,0x7
0x00000000004006c2 <+181>: mov edx,eax
0x00000000004006c4 <+183>: mov eax,DWORD PTR [rbp-0x40]
0x00000000004006c7 <+186>: add edx,eax
0x00000000004006c9 <+188>: mov eax,DWORD PTR [rbp-0x38]
0x00000000004006cc <+191>: shl eax,0xe
...
|
Spero possa tornare utile
Ultima modifica effettuata da XBarboX il 08/06/2015 alle 19:43