PDA

Visualizza la versione completa : [C] Generazione indesiderata di una consonante con rand()


RIACK
03-02-2011, 20:16
66+(rand()+time(NULL))%25;

sapete dirmi perchè quella istruzione genera una consonante casuale in c?

rand() genera un numero casuale
time(NULL) l'orario in secondi
e fin quì non capisco il perchè della loro somma,
il %25 è perchè le consonanti dell'alfabeto sono 25 (ma non capisco lostesso il perchè di questa operazione,
il +66 idem, cioè non ne capisco il motivo.....



P.S. il bello è che quella istruzione l'avevo scritta io ma non ricordo più come funziona :D

_Alfabetagamma_
03-02-2011, 20:58
forse il rand è fatto su un char, forse il 66 voleva intendere il 64 (la a nella tabella ascii) e questo dava una qualsiasi lettera (forse XD)

YuYevon
03-02-2011, 21:16
In realtà la A (maiuscola) secondo la codifica ASCII è 65, quindi dovrebbe esserci un 65 lì, né 66 né 64.
Insomma a 65 si somma un numero casuale compreso tra 0 e 24, questo nel tentativo di coprire tutto l'alfabeto ma in realtà dovrebbe essere da 0 a 25, dato che le lettere dell'alfabeto inglese sono 26.
Per capire perché (rand() + time(NULL)%25 sia un numero compreso tra 0 e 24 basta sapere cosa fa l'operatore %.
In realtà c'è anche una possibilità di overflow di intero in quella espressione, dato che la somma dei valori restituiti da rand() e time() potrebbe superare il massimo intero rappresentabile.

RIACK
03-02-2011, 21:55
vi ringrazio lostesso ma ho già capito come funziona....



P.S. l'istruzione è giustissima.........c'è 66 e non 65 perchè A non è una consonante.....quindi si può benissimo partire da B (66).

Loading