作业帮 > 数学 > 作业

(number != 0)&&((number&(number-1))==0)

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/09/15 06:16:50
(number != 0)&&((number&(number-1))==0)
这是一个判断是否为2的幂的数,大神分析下,这个语句的运行思路?number为任意输入的整数
(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的幂
再问: 右边的那个运算能在解释清楚点么,就是这个地方有点糊,谢谢
再答: 首先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的幂