我有一个 Arduino 草图,它基本上是 c++,其中包含以下代码行:
uint32_t cardid = uid[0];
cardid <<= 8;
cardid |= uid[1];
Arduino 连接到 pn532 RFID 阅读器,因此基本上它会扫描范围内的卡并在其上打印 UID。
但我无法理解运算符 |= 和 <<= 的作用。
我在网上发现它们与 valarrays 有关系,但我从未使用过这样的东西。
通常,这些运算符是快捷方式:
a <<= b --> a = a << b
a |= b --> a = a | b
在给定的示例中,此代码从两个 8 位值生成一个 16 位值。给定
uid[0] = 0x12
uid[1] = 0x34
然后
uint32_t cardid = uid[0]; // cardid is now 0x12
cardid <<= 8; // shifts the value 8 bits to the left -> 0x1200
cardid |= uid[1]; // applies the OR operator -> 0x1200 | 0x34 = 0x1234
C ++允许+= *= |= &= ...
在您的情况下,第一个<<=
称为right shift assignment
运算符,它是移动相同 lValue 的位然后将结果分配给它本身的快捷方式:
int a = 7;
a <<= 2;
a = a << 2; // This line is identical to the one above.
第二个|=
称为Bitwise Or Assignment
运算符,它是对相同 lValue 的位进行按位或运算的快捷方式,然后将结果分配给它本身:
int a = 7;
a |= 2;
a = a | 2; // This line is identical to the one above.
这些是按位运算符(写为快捷方式)。
卡片 <<= 8; 等同于cardid = (cardid << 8); 这会进行算术左移,在这种情况下本质上是乘以 2^8。
cardid |= uid[1]; 等同于cardid = (cardid | uid[1]); 这执行按位或,也就是说,它设置在 cardid 中的位中,这些位也在 uid 中设置。