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 .