c语言中使用位与&运算判断一个整数是否是2的n次幂

利用位与 & 运算,判断一个整数是否是2的整数次幂。

分析过程:
二进制数的位权是2的n次方,通过观察发现如果一个数m是2的n(n>=0 )次方,那么它的二进制数的最高位必定为1,其余位都是0;
比如2 -->10 2^2 -->100 2^3 -->1000 2^4 -->10000 这是一些符合要求的m值对应的二进制数
m-1:1 -->01 3 -->011 7 -->0111 15 -->01111 这是一些m-1的值 对应的二进制数
m&(m-1): 00 000 0000 00000 满足条件的m,m&(m-1) ==0;得出结论:如果一个整数m是2的n次方,那么m&(m-1)一定为0;即使m=1也是满
足的
不符合的m: 3 -->011 7 -->0111 15 -->01111 这是一些整数不是2的n次幂 对应的二进制数
减1: 2 -->010 6 -->0110 14 -->01110 这是不满足条件的整数减去1之后对应的二进制数
m&(m-1): 010 0110 01110 不满足条件的m,m&(m-1) !=0;得出结论:如果一个整数m不是2的n次方,那么m&(m-1)一定不为0

#include <stdio.h>
/*
二进制数的位权是2的n次方,通过观察发现
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值