#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int a[8]={0};
for(int i=0;i<8;i++)
{
if(n&(1<<i)) a[i] = 1;
}
int count=0;
int max=0;
for(int i=0;i<8;i++)
{
if(a[i]==1)
count++;
else
count=0;
max=max>count?max:count;
}
printf("%d\n",max);
}
}
对于代码段中,这个n&(1<<i),虽然知道是i左移,然与n进行and运算,但是对于具体操作流程还是不是特别理解,希望有大佬相助
一个int 是4个字节,比如1是0x00000001,转换为二进制就是:
0000 0000 0000 0000 0000 0000 0000 0001
左移一位后就是(左移1位相当于乘以2):
0000 0000 0000 0000 0000 0000 0000 0010
两个int进行&操作,就按照上面的方式转换成二进制,按位进行与操作。
不知道你这个问题是否已经解决, 如果还没有解决的话: