以下代码用于对微 Controller 进行编程。我想知道下面的代码在做什么。我知道'|'是 OR 和 '&' AND 但整条线在做什么?
lcd_port = (((dat >> 4) & 0x0F)|LCD_EN|LCD_RS);
最佳答案
因为我们不知道 dat
包含什么,所以很难将其放入上下文中,但我们可以看到:
- 数据右移 4 位,因此
11111111
变为00001111
,例如。 该值与 0x0F 进行“与”运算。这是删除不需要的位的常用技巧,因为
b & 1 = 1
和b & 0 = 0
。将您的数字视为一个位序列,这是一个 2 字节的示例:0011010100111010
&
0000000000001111
0000000000001010
现在
LCD_EN
和LCD_RS
标志被“或”运算。同样,这是一个常见的二进制技巧,因为b | 1 = 1
和b | 0 = b
,所以你可以添加标志但不能删除它们。所以,如果说LCD_EN = 0x01
和LCD_RS = 0x02
,0000000000001010
|
0000000000000011
0000000000001011
希望你更清楚。
关于c - 解释C代码指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749722/