C 中的按位运算 |=

sem*_*off -2 c bit-manipulation arduino bitwise-operators

我正在查看示例代码并发现此操作:

displayMap[x + (y/8)*LCD_WIDTH]|= 1 (shift by) shift; 
Run Code Online (Sandbox Code Playgroud)

在哪里

byte shift = y % 8;
Run Code Online (Sandbox Code Playgroud)

我理解|操作数,=但是它们两个一起做什么。

Gov*_*mar 11

| 对其传递的两个操作数执行按位或运算。

例如,

byte b = 0x0A | 0x50;
Run Code Online (Sandbox Code Playgroud)

如果您查看0x0Aand的底层位0x50,它们分别是0b000010100b01010000。与 OR 运算符结合使用时,结果b0b01011010, 或0x5A十六进制。

|=类似于像运营商+=,并-=在其将执行按位或在两个操作数,然后将结果存储在左边的操作。

byte b = 0x0A;
b |= 0x50;

// after this b = 0x5A
Run Code Online (Sandbox Code Playgroud)