判断一个无符号整数是不是2的n次幂的幂
C版本:
?
#include<stdio.h>
unsigned int f2(int n);
//判斷無符號整數d是不是[2的n次冪]的冪,并指出該數[d]是[2的n次冪]的多少(e)次冪
//原理:2的n次冪的冪的二進制位中有且只有一位是1,且1后面剛好是n個0為一組
int IsPowerof2Power(unsigned int d, int n, int *e)
{
?int i = sizeof(d) << 3;??//這里i得到d所占的位數(bits),因為要對d的每一位作判斷
?unsigned int v;
?while(i > 0)
?{
??v = f2(n) & d;???//取得d的最后n位
??d >>= n;
??if(v == 1)
??{
???if(d == 0)
???{
????*e = (int)((sizeof(d) << 3) - i) / n;
????return 1;??//是2^n的冪
???}
???else
????return 0;??//不是2^n的冪
??}
??else if(v == 0)
???i -= n;
??else
???break;
?}
?return 0;
}
unsigned int f2(int n)???//求2^n-1
{
?unsigned d = 1;
?d <<= n;
?d -= 1;
?return d;
}
void main()
{
?unsigned int i = 2; //1是任何非零數的0次冪
?int n, e, n2;
?printf("此程序用來判斷某個無符號整數是不是2的n次冪的冪,請輸入n(大于0): ");
?scanf("%d", &n);
?while(i < 999999999)??//4294967296 = 2^32
?{
??if((n > 0) && IsPowerof2Power(i, n, &e))
??{
???n2 = 1 << n;
???printf("%d? is %d's Power, %d = %d^%d/n", i, n2, i, n2, e);
??}
??i += 2;
?}
}
總結
以上是生活随笔為你收集整理的判断一个无符号整数是不是2的n次幂的幂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数串
- 下一篇: The path is not a v