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

我不明白这段代码。 任何帮助?

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

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使其更具可读性。 该算法也不清楚,使用按位操作不是编写不可读代码的借口。


if语句评估0xC9 & j ,如果出现非零值,则将其视为“true”( LED = 1 ),否则为“false”( LED = 0 )。

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

链接地址: http://www.djcxy.com/p/72655.html

上一篇: Binary AND operator in If statement condition

下一篇: What is the mean of the ampersand symbol(&) in this sentence?