sprintf("%08X", rand(0xFFFFFFFF))
alcune persone hanno menzionato il finestre termine di rand con il Max-Valore di rand (0x7FFF) o rand (32768) decimale, voglio superare questo con binario disinnesto operatore '< <'
# overcomes the windows-rand()-only-works-with-max-15bit-(32767)-limitation:
# needed 8*4==32bit random-number:
# first get the 15 high-significant bits shift them 17bits to the left,
# then the next 15bits shifted 2 bits to the left,
# then the last 2 bits with no shifting:
printf('%08X', (
(rand(0x8000)<<17) + (rand(0x8000)<<2) + rand(0b100))
);
Ma ritengo questo su come accademico, perché è un codice veramente imbarazzante che è difficile da capire.
Non lo userei nel codice della vita reale, solo se la velocità è il massimo.
Ma forse è la soluzione più veloce e sta dimostrando uno schema per superare la limitazione della funzione rand() sotto windows ...
fonte
2012-04-26 15:40:50
Golf: 'perl -e'print [0..9, A..F ] -> [rand 16] per 1..8'' – daxim
Perché downvoting? Ho bisogno di imparare la programmazione. Che cos'è lo stackoverflow se non questo tipo di domande? – unixman83
Non ho votato il tuo post. Tuttavia, in generale, escludere qualsiasi modulo CPAN non è considerato favorevolmente. Inoltre, ci si aspetta che tu faccia uno sforzo per trovare una tua soluzione e chiedere aiuto con questo, piuttosto che aspettarti che gli altri ti diano soluzioni in scatola. –