I wanted to share another technique for determining if a number is odd/even in JavaScript - or any other programming language. The common solution to this problem is to use the modulus (%
) operator:
With the modulus operator it's as simple as:
var isOdd = number % 2;
var isEven = !(number % 2);
However, you can achieve the same result by using the bitwise operators and ANDing the number with 1
.
var isOdd = number & 1;
var isEven = !(number & 1);
Both produce the same result, but the bitwise approach will be faster if you care about micro-optimisations.
How does this work?
When you AND two numbers together the operation returns 1
if the matching bits from both operands are 1
.
So let's take a simple example, is the decimal number 10
odd?
First convert the decimal number to binary: 0000 1010
. Now let's AND that number with decimal 1
, which is 0000 0001
when converted to binary.
0000 1010 // decimal 10
AND 0000 0001 // decimal 1
= 0000 0000
If the AND operation produces 0
the number is even - as in the previous example.
Let's look at another example using an odd decimal number:
0000 1011 // decimal 11
AND 0000 0001 // decimal 1
= 0000 0001
If the AND operation produces 1
the number is odd - as in the previous example.
Conclusion
Admittedly this isn't revolutionary, but it's good to understand how to use Bitwise operators and what type of problems they can solve.