C中的=和|=有什么区别?

What is the difference between = and |= in C?

我是 C 语言的新手,我想了解两者之间的区别

DDRB |= 0b00000001;    

DDRB = 0b00000001;    

这两行写一个到数据寄存器B的效果一样吗?

它们有什么不同?

刚刚可以注册 google 搜索“|” ..所以需要一些帮助来理解它。

第一个操作称为 bitwise OR |,它的工作原理如下,假设数字 A=200 和 B=184,二进制分别为 11001000 和 10111000。运算符“|”将比较这些数字中的每一个的位,并且 returns 1 当任一位是 1 时, 0 否则。所以在你的情况下:

  11001000  
| 10111000 
  -------- 
= 11111000

结果将是 248(二进制为 11111000)。因此DDRB |= 0b00000001;是DDRB = DDRB | 0b00000001.

第二个操作(例如, DDRB = 0b00000001)只是将值赋给变量。

Do the two lines have same effect of writing one to data register B ?

没有

DDRB = 0b00000001;   

将 1 写入 bit-0,将 0 写入 bit 1 到 7,同时:

DDRB |= 0b00000001;   

是一个读-修改-写操作等同于:

DDRB = DDRB | 0b00000001;   

所以它像以前一样将 1 写入位 0,并保持所有其他位不变。

例如,如果 DDRB 的当前值是 0b11110000 之后:

DDRB = 0b00000001;   

它将是 0b00000001 而之后:

DDRB |= 0b00000001;   

它将是0b11110001

所以一个设置DDRB为1,而另一个设置DDRB:Bit-0为1.