学习
实践
活动
专区
工具
TVP
写文章

x & (x - 1)==0

判断一个整数x是否是2的N次方。   方法之一是判断x & (x - 1)==0。若为True,则x是2的N次方;若为False,则x不是2的N次方。    显然X>0(当X≤0,没有讨论的意义)   给定正整数XX是2的N次方的充要条件是X转化成二进制后,有且只能有一个1,其余的都是0   也就是说,若X是2的N次方,则x1=1,x2=……=xn     再证明“不是2的N次方不符合X & (X - 1)==0条件”   分两种情况,   1、X是奇数,则X=x1x2……xn-1xn,x1=xn=1,故X=1x1x2……xn-11     则X-1=1x2……xn-10     则X & X-1是      1x2x3……xn-112  =X10         &  1x2x3……xn-102  =X-110 2、X是偶数,则X=x1x2……xn-1xn,x1=1,xn=0     由于X不是2的N次方,因此x1,x2……xn-1中至少有两个为1。

35920
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言中的宏陷阱 #define SQU(xx*x

    求两个或几个数的乘积: #define SQU(x) x*x 我们正常使用没有问题: ? 但如果这样写呢? ? 哎呀,竟然不是100了,难道SQU(10)和SQU(5+5)不等价吗? 那么解决这个问题的办法,相信大家看完之后心里应该有答案了,就是给x加个小括号,使它变成一个整体,如下: ? 就可以解决了。 然而,这并不没有完! 与此类似的,当我们想算两个数的和的时候呢? 正常写,不会触发陷阱,关键没错并不代表没有问题(虽然每个x都加了小括号!) 大家试试这样写: ? 艾玛! 为嘛不是20*20的400呢? 这么写:#define ADD(x) ((x)+(x)) ? 怎么样,这样写就没问题了!你的宏,从此百毒不侵! 有什么学习中遇到的问题,请联系我们! C语言研究中心(www.dotcpp.com)

    78850

    Jenkins X 3.x GA 来了!

    Jenkins X 3.x 正式发布! 我非常激动的向大家宣布 Jenkins X 3.0 GA 版本正式发布啦! 文档 主要改动的文档有: 带有模块化插件以及提升扩展点后的新架构 3.x 开始都做了那些变更 3.x 与 2.x 的对比 DevOps 指南 和 DevOps 模式 提供了我们在 DevOps 领域的学习概况 目前我们在生产环境使用 Jenkins X 3.x 已经有几个月的时间了(CI/CD 使用的是基于 3.x 的代码并以一种标准的方式升级我们的集群)目前使用、操作配置都变得更加简单容易了。 我们已经持续交付 Jenkins X 的变更到生产集群已经有几个月的时间了,运行的同样很棒 - GitOps 棒棒哒! 总的来说 Jenkins X 3.x 已经变得更简单也更灵活。 如果你之前使用过 3.x alpha 版本这里有迁移说明可供参考。 使用过 Jenkins X 2.x 版本的朋友可以查阅 2.x 迁移说明。

    64630

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • X-P2P

      X-P2P

      腾讯云X-P2P以新一代的 P2P 技术为核心,充分利用边缘计算存储能力和整体网络闲置带宽,结合音视频 SaaS 服务,提供给客户更好用户体验、更高性价比的流媒体方案。客户通过客户端集成 SDK,能够获得更流畅播放体验并显著降低分发成本,适用于互动直播、电视内容直播、赛事直播、在线视频、短视频等业务场景。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券