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

C If语句条件下的二进制AND运算符,c,if-statement,for-loop,operators,C,If Statement,For Loop,Operators,我不明白这段代码。有什么帮助吗 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; } if-语句计算0xC9&j,如果结果为非零,则将其视为“true”(LED=1

我不明白这段代码。有什么帮助吗

    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;
    } 

if
-语句计算
0xC9&j
,如果结果为非零,则将其视为“true”(
LED=1
),否则为“false”(
LED=0


在C(和许多其他语言)中,在布尔上下文中使用时,非零表示“真”,零表示“假”。if-statement求值为
0xC9&j
,如果结果为非零,则视为“真”(
LED=1
),否则为“假”(
LED=0


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

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

j = j >> 1
基本上是一个整数除以2。所有位都从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来提高可读性。算法也不清楚,使用逐位运算不是编写不可读代码的借口。

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

j = j >> 1
基本上是一个整数除以2。所有位都从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来提高可读性。算法也不清楚,使用位运算并不是编写不可读代码的借口。

这是二进制和运算符。你到底不明白什么?解雇那个缩进代码的实习生。它是怎么工作的?if(condition)中传递了什么条件?
if
-语句表达式具有位and运算符。你想知道这是怎么回事吗?你读过吗?或者是C处理布尔值的方式?它是二进制和运算符。你到底不明白什么?解雇那个缩进代码的实习生。它是怎么工作的?if(condition)中传递了什么条件?
if
-语句表达式具有位and运算符。你想知道这是怎么回事吗?你读过吗?或者是C如何处理布尔值?