导读:(number != 0)&&((number&(number-1))==0) (number != 0)&&((number&(number-1))==0)这是一个判断是否为2的幂的数,大神分析下,这个语句的运行思路?number为任意输入的整数 九月霜降 1年前他留下的回答 已收到1个回答...
(number != 0)&&((number&(number-1))==0)
(number != 0)&&((number&(number-1))==0)
这是一个判断是否为2的幂的数,大神分析下,这个语句的运行思路?number为任意输入的整数
九月霜降
1年前他留下的回答
已收到1个回答
画出心中的彩虹
网友
该名网友总共回答了18个问题,此问答他的回答如下:采纳率:83.3%
(number != 0)和((number&(number-1))==0)优先级是同等的.
先运算左边,如果number!=0为真,再运算右边;否则,结果直接为假,不计算右边(这个叫懒惰)
再看右边.首先需要知道2的幂和二进制的关系.2的幂就是2,4,8,16……二进制数为10, 100, 1000, 10000……
number和number-1进行与运算(对应位上同为1则结果为1),结果为0则是2的幂
1年前他留下的回答
追问
2
九月霜降
右边的那个运算能在解释清楚点么,就是这个地方有点糊,谢谢
画出心中的彩虹
首先2的幂的二进制数最高位是1,比如100000000000。不管number是不是2的幂,number一定可以写成1abcd的形式(abcd的取值为0或者1),number和number-1的与运算为0,那么number-1是高位必须是0,即是0efgh的形式。那么1abcd-1=0efgh说明什么呢?说明1abcd减1的时候一直在借位,也就是说abcd都是0,所以number就是10000,即2的幂
以上就是小编为大家介绍的(number != 0)&&((number&(number-1))==0) 的全部内容,如果大家还对相关的内容感兴趣,请持续关注上海建站网!
标签:
内容声明:网站所展示的内容均由第三方用户投稿提供,内容的真实性、准确性和合法性均由发布用户负责。上海建站网对此不承担任何相关连带责任。上海建站网遵循相关法律法规严格审核相关关内容,如您发现页面有任何违法或侵权信息,欢迎向网站举报并提供有效线索,我们将认真核查、及时处理。感谢您的参与和支持!