Skip to content
Advertisement

Is the number the power of 2 – without using log10 ? PHP

I’m new to PHP I was taking coding challenge and I stumbled on this piece of code :

// check whether a given positive integer is a power of two.

The solution

function is_Power_of_two($n)
{
   if(($n & ($n - 1)) == 0)
    {
        return "$n is power of 2";
    }
   else
    {
        return "$n is not power of 2";
    }
}
print_r(is_Power_of_two(4)."n");
print_r(is_Power_of_two(128)."n");
print_r(is_Power_of_two(16)."n");

In the if section, what is happening there ?

let’s say $n = 2

2 & 2 - 1 == 0 // replaced $n with num
2 & 1 == 0 ? // results , What ? 

EDIT :

So basicly

& isn’t a logical operator

It is a bitwise Operator

Bitwise operators allow evaluation and manipulation of specific bits within an integer.

You can check this video that I found very helpful it will show you how bit’s work and how you can work with bitwise

https://www.youtube.com/watch?v=2U-bh4gSn1k

And thanks to : kollol

now I get why the solution code return only the power of two values

Also thanks to : lars-stegelitz kiko-software

Advertisement

Answer

if both digits are same vertically then the value will be 1, 0 otherwise for example

2 & 16 = (binary of 2) & (binary of 16)
          00010    &      10000
       =  00000 = 0

    (2)  00010
    (16) 10000
------------------
         00000

now suppose

2 & 18 = (binary of 2) & (binary of 18)
          00010    &      10010
   
   (2)  00010
   (18) 10010
----------------------
        00010  = not 0


logic is all the numbers which are power of two will always get a 0 in bitwise and operation with 2. Rest will not .

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement