【问题标题】:What do the operators |= and <<= do?运算符 |= 和 <<= 做什么?
【发布时间】:2017-02-05 11:12:46
【问题描述】:

我有一个 Arduino 草图,它基本上是 c++,其中包含以下代码行:

uint32_t cardid = uid[0];
cardid <<= 8;
cardid |= uid[1];

Arduino 连接到 pn532 RFID 阅读器,因此基本上它会扫描范围内的卡并在其上打印 UID。
但我无法理解运算符 |= 和 我在网上发现他们和valarrays有关系,但我从来没有用过这样的东西。

【问题讨论】:

  • “它们与 valarrays 有关” 不,这些是按位 OR 和左移运算符。
  • 因缺乏研究工作而被否决。这并不难用谷歌搜索。

标签: c++ arrays arduino rfid valarray


【解决方案1】:

一般来说,这些操作符是快捷方式:

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

【讨论】:

    【解决方案2】:

    C++ 允许 += *= |= &amp;= ... 因此在您的情况下,第一个 &lt;&lt;= 称为 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.
    
    • 这两个运算符都适用于位。

    【讨论】:

      【解决方案3】:

      这些是位运算符(写成快捷方式)。

      cardid 与 cardid = (cardid 相同 这会进行算术左移,在这种情况下实际上是乘以 2^8。

      cardid |= uid[1]; 等同于 cardid = (cardid | uid[1]); 这执行按位或,即它设置在 cardid 中的位中,这些位也在 uid 中设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 2013-08-08
        • 2017-10-09
        相关资源
        最近更新 更多