0
回答
位运算判断一个数是否为2的n次方
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

int is_power(int x)
{
    return !((x-1) & x);
}

纯位操作,不需要逻辑运算。

 

在手机游戏开发中,纹理不能是非2的n次方的大小,用代码可以将其转化为服合要求的纹理。其中我们要找到原图片大小下一个服合2的n次方的大小,这儿有种方法,也不需要逻辑运算:

inline bool FIsPow2(int n)
{  
if (n<=0)  
return false;  
return (n & (n-1))==0;
}
// Next power of 2
inline int FNextPow2(int n)
{	
n--;	
n |= n>>1;	
n |= n>>2;	
n |= n>>4;	
n |= n>>8;	
n |= n>>16;	
n++;	
return n;
}
// Previous power of 2
inline int FPrevPow2(int n)
{ 
 int n2 = n>>1;  
// divide by 2  
if (n2>0)   
 return FNextPow2(n2);  
else
    return FNextPow2(n);
}
// Nearest power of 2
inline int FNearPow2(int n)
{  
if (FIsPow2(n))  
return n;  
int nNext = FNextPow2(n);  
int nPrev = FPrevPow2(n);  
if (nNext-n>abs(n-nPrev))    
return nPrev;  
else
    return nNext;
}


原文链接:http://blog.csdn.net/favormm/article/details/5414051
<无标签>
举报
长平狐
发帖于5年前 0回/309阅
顶部