(number != 0)&&((number&(number-1))==0)
来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/09/29 14:34:28
(number != 0)&&((number&(number-1))==0)
这是一个判断是否为2的幂的数,大神分析下,这个语句的运行思路?number为任意输入的整数
这是一个判断是否为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的幂
先运算左边,如果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的幂
(number != 0)&&((number&(number-1))==0)
C语言中number = number < 0 -number :number;这句话是什么意思
C语言 number=number
number=number*10+(s[i]-'0')是什么意思
number = number * 8 + str[i] - '0';中的 str[i] -
number.
英语翻译void verify(){if(null!=number&&number.length()>0)/*看不懂这个
C语言中number!=
telephone number = phone number_________.
Matlab7.0 license number
int number; int i=0,sum=0; for (i = 0; i < 10; i++) number =
FLASH里的/:/:correct = Number(/:correct)+1