C语言位运算,关于接收byte数中位运算问题

#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进行&操作,就按照上面的方式转换成二进制,按位进行与操作。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^