c语言中的逻辑方面的问题

char DHT11_byte ;
unsigned char i ;
unsigned char temp ;

DHT11_byte = 0 ;
for ( i = 0 ; i < 8 ; i ++ )
{
temp = 0 ;
while ( ! a )//a为电平
{
temp ++ ;
if ( temp > 12 )
return 1 ;
udelay ( 5 ) ;
}
temp = 0 ;
while ( a )
{
temp ++ ;
if ( temp > 20 )
return 1 ;
udelay ( 5 ) ;
}
if ( temp > 6 )
{
DHT11_byte <<= 1 ;
DHT11_byte |= 1 ;
}
else
{
DHT11_byte <<= 1 ;
DHT11_byte |= 0 ;
}
}
return DHT11_byte ;
}
能否详细的讲解一下,本人菜鸟,自学,被这几句搞晕了。。。

先把char型转化为8位2进制就好理解点,然后
DHT11_byte <<= 1 ;
DHT11_byte = DHT11_byte << 1;
//位运算,向前左移一位,右边补上0
DHT11_byte |= 1 ;
DHT11_byte = DHT11_byte | 1;
//位运算,位或,只对每一位的0与1取或
for中另外声明了i,最开始也声明了无符号char i,所以是不是char a?
如果不是,那么for中的i值都以for中声明的i为准...
while(a)会判定当a!=0时为真,a == 0时为假,切记,0 != "0",0 == "\0";
大概就这样了,如果哪儿不懂就继续问吧...追问

感谢!temp在里面是什么作用

追答

20 == 0001 0100,12 == 0000 1010 ,temp和这两数比较估计是判定某一位的,不好意思啊,电路什么的我不懂...

追问

谢谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-10
你这个是读一个字节的数据的吧。追问

xiexie

追答

temp应该是超时处理

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网