If语句条件中的二进制AND运算符

问题描述:

我没明白这段代码。任何帮助?If语句条件中的二进制AND运算符

for(j = 0x40; j > 0; j = j >> 1) 
    { 
    if(0xC9 & j) 
     LED = 1; 
    else 
     LED = 0; 
    delay_us(10); 
     CLK = 1; 
    delay_us(10); 
     CLK = 0; 
    } 
+1

那么它是二元和运算符。你不明白什么? – ckruczek

+3

激发缩进代码的实习生。 –

+0

它是如何工作的? if(条件)中传递了什么条件? –

if语句来评估0xC9 & j,如果该出来为非零,则它会被视为“真”(LED = 1),否则它的“假”(​​)。

在C语言(以及许多其他语言)中,当在布尔上下文中使用时,非零表示“真”,零表示“假”。

for循环有点棘手。此操作:

j = j >> 1 

基本上是一个整数除以二。所有的位都从1位移到右边。例如:

unsigned char foo = 0x20; //Binary : 0010 0000, Decimal : 32 
foo = foo > 1; //Hex : 0x10, Binary : 0001 0000, Decimal : 16 

这个if语句:

if(0xC9 & j) 

如果某些位在循环变量设置为1是测试。 0xC9是将位7,6,3和0设置为1的数字(0xC9 = 0b11001001 = 201)。如果这些位中的任何一个在j中等于'1',则条件为真。

这不是一个真正用户友好的代码,编写它的人应该使用一些#define使其更具可读性。该算法也不清楚,使用按位操作不是编写不可读代码的借口。