51单片机这两个代码实现功能是一样的吗?为啥我用第一种就错了呢?求告知

for(i=0;i<8;i++)
{
if(io){Data|=(0X01<<i);}
}



for(i=0;i<8;i++)
{
Data<<=1;
Data|=io;
}求告知

你好,很高兴回答你关于“51单片机这两个代码实现功能是一样的吗?为啥我用第一种就错了呢?”的问题。
第一种代码: for(i=0;i<8;i++) { if(io){Data|=(0X01<<i);} } 和 第二种代码:for(i=0;i<8;i++) { Data<<=1; Data|=io; } 这两种代码的实现功能是不一样的,他们实现的功能也有一定的差别。
第一种代码是实现“从一个变量中每次取出一个bit,并将其放入另一个变量中”的功能,而第二种代码则是实现“从一个变量中每次取出一个bit赋值给另一个变量”的操作。
所以如果你用第一种代码来实现第二种代码要实现的功能,就会出错,因为它们的功能实现是不一样的,所以应该使用第二种代码才能正确实现要求的功能。
总之,51单片机的这两个代码的功能是不一样的,所以使用不当可能会导致错误,建议大家在使用时一定要仔细检查代码是否正确,才能够得到期望的结果。希望对您有所帮助,祝您编程顺利!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-28
如果两段代码都用来接收串行比特流,那么两段代码是完全相反的方向。
例如如果总线上按时间顺序依次是 10110001
那么按照第一段代码接收的结果是 10001101,也就是0x8D;
按照第二段代码接收的结果是 10110001,也就是0xB1。
第一段代码适用于高位在后(LSB first)的比特流接收,第二段代码适用于高位在前(MSB first)的比特流接收。作为接收方,你必须按照发送方发出的比特流时序来选用适当的接收方式,否则就是白白错付了……本回答被提问者采纳
相似回答