Recently I wrote about binary search and then I said that in some languages, like PHP, bitwise division by two is not faster than the typical “/” operator. However I decided to make some experiments and here are the results.

## Important Note

It’s very important to say that the following results are dependant from the machine and the environment!

## Source Code

Here’s the PHP source code.

function divide($n = 1) { $a = microtime(true); for ($i = 0; $i < $n; $i++) { 300/2; } echo microtime(true) - $a; } divide(100); //divide(1000); //divide(10000); //divide(100000); //divide(1000000); //divide(10000000); |

and bitwise …

function bitwise($n = 1) { $a = microtime(true); for ($i = 0; $i < $n; $i++) { 300 >> 1; } echo microtime(true) - $a; } bitwise(100); //bitwise(1000); //bitwise(10000); //bitwise(100000); //bitwise(1000000); //bitwise(10000000); |

Note that each method was called 6 times with the same parameter. This means that divide(100) was called 6 times and then I used the average value of these six times.

## Results

I said back then in my binary search post, that in PHP the bitwise operator “>> 1″ is not faster than the typical division with the “/” operator. However the results tells us that using bitwise division is slightly faster, as you can see at the diagram bellow.

n ">>" "/" 100 0.0002334912618 0.000311803817749 1000 0.001911004384359 0.007335503896078 10000 0.013423800468445 0.039460102717081 100000 0.14417803287506 0.21413381894429 1000000 1.15839115778605 1.17152162392935 10000000 10.556711634 11.0911625623705 |

## Conclusion

Although bitwise division is a bit faster the difference is so small that you should work with very large data in order to gain some performance.

Talk about a Micro-optimization…

Also notice that

`a / 2`

is not equivalent to`a >> 1`

. It is somewhat like`floor(a / 2)`

, but there are plenty of cases where it’s different (such as if a is negative).