c语言i=5,j=0 语句for(;i;i&i-1)j++怎么理解
1个回答
展开全部
i=5,j=0
for(;i;i&i-1)//我觉得应该是i=i&i-1,要不然无法跳出循环
j++;是这样吧我大致给你写一下
/*首先要理解什么按位与< & >
你可以百度一下也可以就看我的解释:
一个十进制是以二进制存在内存中的--举例:
9:0000 0000 0000 1001
8:0000 0000 0000 1000
9&8:0000 0000 0000 1000
也就是说9&8=8:上面很清楚的可以看到两个数二进制同一位置的数都是一按位与也是否则都是零
其次就是在C语言里面:if(i)--只要i是非零数都判断成立,换句话说i==0判断不成立
从这两个知识点出发解释代码
*/
int i=5,j=0;
for(;i;i=i&i-1) //for(给i赋初值;判断语句;循环体)
j++; // i=5(没必要重写);i!=0;i按位与i-1(按位与优先级在加减乘除下面)
for(;i;i&i-1)//我觉得应该是i=i&i-1,要不然无法跳出循环
j++;是这样吧我大致给你写一下
/*首先要理解什么按位与< & >
你可以百度一下也可以就看我的解释:
一个十进制是以二进制存在内存中的--举例:
9:0000 0000 0000 1001
8:0000 0000 0000 1000
9&8:0000 0000 0000 1000
也就是说9&8=8:上面很清楚的可以看到两个数二进制同一位置的数都是一按位与也是否则都是零
其次就是在C语言里面:if(i)--只要i是非零数都判断成立,换句话说i==0判断不成立
从这两个知识点出发解释代码
*/
int i=5,j=0;
for(;i;i=i&i-1) //for(给i赋初值;判断语句;循环体)
j++; // i=5(没必要重写);i!=0;i按位与i-1(按位与优先级在加减乘除下面)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询