m0_46234525 2022-01-26 18:55 采纳率: 100%
浏览 44
已结题

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才对啊

  • 写回答

2条回答 默认 最新

  • _GX_ 2022-01-26 19:24
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 创建了问题 1月26日