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.
我是 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.