1,先来看常规解题代码
先设定一个变量temp,然后给temp每次乘2最后与给出的数进行比较
代码展示
void ispower(int num){
int temp=1;
while(temp<=num){
if(temp==num){
cout<<"is"<<endl;
break;
}
else{
cout<<"NO"<<endl;
break;
}
temp=temp*2;
}
}
那么这个代码可以优化吗?
答案是肯定的,把之前的乘2操作改成左移位,因为移位的性能比乘法高很多
简单介绍一种方便计算的方法:
8 << 1的值为8*2=16;
8 << 2的值为8*(2^2)=32;
8 << n的值为8*(2^n)。
代码展示
void ispower1(int num){
int temp=1;
while(temp<=num){
if(temp==num){
cout<<"is"<<endl;
break;
}
else{
cout<<"NO"<<endl;
break;
}
temp=temp<<1;//左移运算符
//例如:8<<1=8*2=16
//8<<2=8*2*2=32
}
}
但是当你用以上两种解法的时候,估计就得回家等通知了
让小博给你提供第三种解法,利用位运算进行求解。
例如:8的二进制 1000 原数值减去一为 0111