我不明白这段代码。有什么帮助吗?
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;
}
答案 0 :(得分:0)
if
- 语句评估0xC9 & j
,如果它出现为非零,则将其视为“true”(LED = 1
),否则为“false”({{ 1}})。
在C(和许多其他语言)中,非零表示“true”,零表示在布尔上下文中使用“false”。
答案 1 :(得分:0)
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)。如果这些位中的任何一位等于' 1'在j中,则条件为真。
这不是一个用户友好的代码,编写它的人应该使用一些#define来使它更具可读性。该算法也不清楚,使用按位运算不是编写不可读代码的借口。