A bitwise operation is an operation that works on the individual bits of a number. Yes, that means the binary(base 2) representation of a number. These bitwise operations work by exploiting properties of binary numbers to their advantage. For instance, if the binary representation of a number ends with a 1, it’s odd.

## Base 2 Refresher

For those of us who don’t manipulate bits every day (including myself), I thought that a quick refresher on binary representation would be a good idea. First, let’s create a table.

Each column in the table represents a power of 2. The first column (from the right) represents 2^{0}, the second 2^{1}, and so on. Notice that I have a 1 in the row below the 0 column. That stands for 2^{0}, and 2^{0} is equal to 1. Therefore, the number represented above (00001) is equal to 1. On to the next table.

Now the base-2 number in the bottom row is 00111. This is equal to 2^{2} + 2^{1} + 2^{0}, or 4 + 2 + 1, which is equal to 7. As you can see, using binary representation is pretty easy. On to our final example.

This example a bit (har, har) trickier. The base-2 number in the bottom row is 11001, which is 2^{4} + 2^{3 }+2^{0}(16 + 8 + 1) = 25. Notice if there are zeros in the columns, we just ignore them completely.

And that’s it! Base-2 representation of numbers is easy, and critical for every programmer to understand. Now on to some tricks.

## Trick 1 : Odd / Even

One of the most useful bitwise tricks for web developers is for determining if a number is even or odd.

for($i = 0; $i < 10; $i++) {
if($i & 1) {
echo "This is odd.";
} else {
echo "This is even.";
}
} |

for($i = 0; $i < 10; $i++) {
if($i & 1) {
echo "This is odd.";
} else {
echo "This is even.";
}
}

So how does help your web development? Alternating rows. If you deal with data in a tabular format, you nearly always need to alternate row color on a table. Using the bitwise “AND” operator is a good way to accomplish this.

## Trick 2 : Multiplication and Division

Using the left-shift (<<) and right-shift (>>) operators, we can easily divide and multiple by powers of two. These operators aren’t limited to powers of two, but it makes things easier to understand.

//Example 1
$x = 2;
echo $x << 1; //4
echo $x << 2; //8
//Example 2
$x = 16;
echo $x >> 1; //8
echo $x >> 2; //4 |

//Example 1
$x = 2;
echo $x << 1; //4
echo $x << 2; //8
//Example 2
$x = 16;
echo $x >> 1; //8
echo $x >> 2; //4

In example 1, we left shift the number 2 one place. By left shifting 1 place, it’s the same as multiplying that number by 2. By left shifting 2 places, it’s the same multiplying the number by 2 twice.

Example 2 is doing bitwise division. Right shifting by 1 place is the same as dividing the number by 2. Right shifting by 2 places, is the same is the same as dividing the number by 2 twice.

## Others

There are most definitely a ton of other uses for bitwise operators, however these are the ones I use the most. If you happen to have a favorite, please let everyone know about it in the comments.

For a more in depth introduction to bitwise operations please check out http://en.wikipedia.org/wiki/Bitwise_operation and http://www.litfuel.net/tutorials/bitwise.htm