• 13 Febbraio 2008
  • 1 Stella2 Stelle3 Stelle4 Stelle5 Stelle 3 voti

Pari o Dispari: modulo o somma logica?

Problema tipico no? Dato un numero N dire se è pari o dispari, la soluzione umanamente più immediata è calcolare il resto della divisione con 2 che deve essere zero, nella maggior parte dei linguaggi:

N % 2 == 0.

Però ci si dimentica che il computer gira in binario e che può fare un’operazione ancora più veloce: n & 1; ovvero la somma logica.

Essendo a base due tutti i numeri pari terminanti con lo zero basta guardare se terminano con esso, per farlo si può fare un And con il numero 1 il che darà 1 se il numero da controllare finisce per 1 (e quindi è dispari) e 0 se invece è pari.

Ecco il codice di esempio (la sintassi è quella stile C in quanto la più diffusa):


if(x & 1) //dispari
else // pari

Ecco l’assembly risultante messo a confronto:

x % 2
—-
00401043 mov ecx,dword ptr [ebp-4]
00401046 and ecx,80000001h
0040104C jns main+43h (00401053)
0040104E dec ecx
0040104F or ecx,0FEh
00401052 inc ecx
00401053 test ecx,ecx
00401055 je main+50h (00401060)

x & 1
—–
00401043 mov ecx,dword ptr [ebp-4]
00401046 and ecx,1
00401049 test ecx,ecx
0040104B je main+46h (00401056)

Come soluzione sarà meno intuitiva, ma più performante e secondo me fa anche più skill ; - ).

RSScommenti all'articolo (1)

  • Tuonorosso Tuonorosso

Molto interessante…

GRAZIE!

inserito il 13 Febbraio 2008 alle 18:24

scrivi commento

Nome:

Email:

Url:


  • ARTICOLI CORRELATI

E’ con immensa soddisfazione che comunico che mondoinformatico.info ha superato i 1.000 articoli pubblicati!

Ebbene si, sembra incredibile ma tantissimi di voi hanno scritto molti articoli, alcuni molto interessanti, altri meno ma tutti originali, unici e in tema.

Il traguardo…

Ultimi Articoli Commenti

Inserisci il tuo indirizzo e-mail per rimanere aggiornato sulle novità del sito.

  • SONDAGGIO
Che notizie vorresti trovare su mondoinformatico?
Visualizza risultati
  • CHATTING

utenti online

Ci sono attualmente 0 utenti e 4 ospiti collegati