Quick comparison and visualization of Geekbench 4 results for smartphones in October 2016. Higher is better. Source.
There are multiple ways to check if a number is even. Most people are using the Modulo Operator:
return (number % 2 == 0);
The modulo operator divides the number and returns the rest of the division. If we divide by 2 and the rest is 0, it’s obviously an even number. Now, the modulo operator is not very fast. In most languages we could also use this little trick:
return ((number / 2) * 2 == number);
If ‘number’ was, let’s say, 13, dividing by 2 would result in 6.5. Since it’s an integer, the .5 just gets cut off, leaving us a 6 behind. Multiplying 6 by 2 results in 12. 12 is not equal to the original number (13), therefore it returns false (number is odd).
That’s a lot faster than using the modulo operator. But we can do this even faster by using the Bitwise AND-Operator:
return !(number & 1);
With this operator, we can mask a number with bits and perform a bitwise AND operation. Lets take 13 again for an example. 13 in binary is this:
The first bit represents 2^0. Every odd number has that bit set, so if we mask 13 with 1 we get this:
1101 & 0001 ____ 0001
If we would mask an even number like 12 with 1, we get this:
1100 & 0001 ____ 0000
(Firefox 20.0, Windows 7, 1e6 iterations)
In most cases, it doesn’t matter what method you are using. If you need speed, use the bitwise AND-operator. If you need readability, use the modulo operator.