首页
学习
活动
专区
工具
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。

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

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

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

    1.3K50

    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 迁移说明。

    1.2K30
    领券