Skip to main content

How to find if a number is power of 2?

Mxl Mxl-Fr-402 Table Interview Boundary Microphone For Field Recording (Google Affiliate Ad)Your writing a normal client server program and there is  a problem, the data length you are expecting is a power of 2. So now how can we check if it is  a power of 2 ? how how how? i thought thought and thunk :P and there were no answers, so at that time what one should do? ask everyone you know and find best answer and this one is the best i guess !!.

So here is the solution :
Let n be the number which you want to test .... wait wait wait .... just now i asked my roomie abt this problem and he gave me one more solution that too on the fly. I think it should work, we just checked it with numbers up to 1024 so it seems the logic is good !! but i don't know how efficient it will be if one wants to implement it.

Solution given by my roomie goes like this.
Convert the given number to binary and if it has just one bit as 1 tada !! its  a power of 2 !! so i think one can implement it this way
// handle the special case where n = 1.

while(n!=0)
{
    int i = n % 2;
    n = n/2;
    if(n == 1)
    {
        count++;
    }
    if(i == 1)
    count++;
    if(count>1)
    {
        notPowerOf2 = TRUE;
        Break;
    }
}

but the time complexity is O(n) for this .

Now i ll go for the actual solution which i came to know by someone.The BEST logic i have ever come across !! just a single line of code to decide whether its a power of 2 or not !! so here it goes


if((n & n-1) == 0)
// Its a power of 2

And time complexity its just O(1) .. What say !!

Please do let me know if there are any problems with this logic and do suggest me if there are any other good solution.







Comments

Popular posts from this blog

Enable stats GUI on haproxy.

Add bottom snippet to the haproxy.conf below the defaults section. listen  stats         bind 19.41.259.10:1234         mode            http         log             global         maxconn 10         clitimeout      100s         srvtimeout      100s         contimeout      100s         timeout queue   100s         stats enable         stats hide-version         stats refresh 30s         stats show-node         stats auth admin:password         stats uri  /haproxy?stats Make sure you are updating the IP address on the bind to your VIP and if you want, you can change th...

Sending a SIGHUP signal to some external process from Python script

Code : import psutil import os import signal pids = psutil.get_pid_list() for pid in pids: if psutil.Process(pid).name == "process_name": os.kill(pid,signal.SIGHUP) break Steps to follow. 1.Get the PID of the process, in this case  "process_name"   to which you want to send out a SIGHUP signal. 2.Use os.kill(pid,sig) command to send out the SIGHUP signal to that process. 1.Get the PID of the process to which you want to send out a SIGHUP signal. One has to install a package called psutil by the following command. easy_install psutil Check out the following links for more details https://code.google.com/p/psutil/ https://pypi.python.org/pypi/psutil use psutil.get_pid_list() to get all of the PIDs. psutil.get_pid_list() works in the following manner.  pids = [ int ( x ) for x in os . listdir ( '/proc' ) if x . isdigit ()] return pids once you get all the PIDs get the PID you are i...

How to install openstack with Devstack on a single machine.

I think the best way to start messing with openstack is to install openstack using devstack. Its easy, customizable, easy to debug and the best part is one can simply discard the installed one and install new one in no time ! So I'll be giving you the steps to install  openstack on a physical box.  i.e all the component of the openstack will be installed on a single machine. Steps to follow. 1. Create a user as 'stack'. adduser stack 2.Install sudo and give the user 'stack' the sudo permission as most of the installation requires sudo permission. apt-get install sudo -y || yum install -y sudo echo "stack ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers 2a. Once done with that, one can assign a password by doing passwd stack and then logout as root and login back as stack for all of the below steps. 3.Get the openstack code. The steps are install git and clone the code from github. sudo apt-get install git -y || yum instal...