C语言模拟I2C为什么这个判断会出错呢

问题相关代码,请勿粘贴截图
#include <stdio.h>

void make_wave(int data,int n)
{
    int temp =n - 1;
    int i;
    int yy;
    int b = 1 << temp;
    
    for(i=0;i<=temp;i++)
    { 
        printf("i=%d ",i);
        printf("%d ",data);
        printf("%d ",b);
        yy = data&b;
        printf("data&b = %d ",yy);        
        if (data&b != 0)
        {
            printf("H\n");
        }
        else
        {
            printf("L\n");
        }
        data = data << 1;
    }
}

int main()
{
   make_wave(3,2);
   return 0;
}
运行结果及报错内容

i=0 3 2 data&b = 2 H
i=1 6 2 data&b = 2 L

我的解答思路和尝试过的方法

在i=1的时候,&的结果为2,为什么会输出L?

我想要达到的结果

应该是H才对啊

!=的优先级比&高,所以if (data & b != 0)等价于if (data & (b != 0)),你应该改为if ((data & b) != 0)

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632