c语言==判断一个数是否为2的整数次方【不使用循环】
对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。
void judge(int n)
{
while(!(n % 2))
{
n = n / 2;
if(n == 1)
{
printf("yes!n);
return;
}
}
printf("NO!n");
return;
}
不过上面的方法并不是较好的方法,其实还有更为简洁高效的方法
一个整数,若是2的n次方,有没有想过对这个整数的2进制进行考虑,比如12,它的二进制为:1100
2 10
4 100
13 1101
16 10000
32 100000
从上面的举例我们发现,凡是2的N次方的整数,其二进制码只有一个1。
假设A为要证明的整数,B等于A-1,我们假设A为2的N次方数,那么A&B = 0,这很好证明。那是不是满足A&B = 0就能证明A是2的N次方数呢?
假设一个数的二进制为1000000000000000(这里为int型:两个字节),那这个数减去1则变为0111111111111111。我们知道,在计算机中,数都是以其二进制的补码放置的,最高位为1代表负数,最高位为0代表正数。上面两个数中,
1000000000000000为负数,0111111111111111为正数,这两个数相与为0,但1000000000000000并不是2的N次方(2的N次方为正数)。
因此,倘若一个数为2的N次方,那么该数应满足大于0且该数和该数减一后的值相与等于0时才为2的N次方。
void judge(int n)
{
if((n > 0) && (n & (n -1) ==0))
{
printf("Yes!n");
return;
}
printf("NO!n");
return;
}
相关知识
每个汉字代表一个数,不同的汉字代表不同的数,请问“数数X科学=学数学”中数学两个字代表的是哪两个数?
C语言入门04
C 语言基础第10
C语言的小问题
2024年十五届蓝桥杯省赛大学B组真题(Java残缺版)
已知10的X次方=1/2,10的Y次方=2,求100的2X+Y的次方的值
六、Python 基础语句
介绍几本心理悬疑小说带点爱情
java学习练习题
Python学习天二天
网址: c语言==判断一个数是否为2的整数次方【不使用循环】 https://www.mcbbbk.com/newsview334754.html
上一篇: 宠物饲养技术技能教案上.doc |
下一篇: 首档宠物医疗观察类真人秀《宠物医 |
推荐分享

- 1养玉米蛇的危害 28694
- 2狗交配为什么会锁住?从狗狗生 7180
- 3我的狗老公李淑敏33——如何 6236
- 4豆柴犬为什么不建议养?可爱的 4637
- 5南京宠物粮食薄荷饼宠物食品包 4563
- 6中国境内禁养的十大鸟种,你知 4429
- 7湖南隆飞尔动物药业有限公司宠 4259
- 8自制狗狗辅食:棉花面纱犬的美 4257
- 9家养水獭多少钱一只正常 4212
- 10广州哪里卖宠物猫狗的选择性多 4122