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 ; - ).



Molto interessante…
GRAZIE!