【问题标题】:what is the meaning of this Logical operators combination in CC中这个逻辑运算符组合的含义是什么
【发布时间】:2020-05-22 14:47:28
【问题描述】:

我知道 -> 是一个指针 |= 是 OR。 这条线的逻辑意义是什么?

TIMER0->ROUTELOC0 |= TIMER_ROUTELOC0_CC0LOC_LOC15

【问题讨论】:

    标签: c pointers embedded logic


    【解决方案1】:

    |= 并不意味着 OR。 |表示或。

    |= 类似于+=,即

    A |= B 等价于 A = A |乙

    所以回答你的问题: 看起来TIMER0 是一个具有成员ROUTELOC0 的结构。上面的表达式将ROUTELOC0 设置为ROUTELOC0TIMER_ROUTELOC0_CC0LOC_LOC15 进行或运算时的结果

    【讨论】:

      【解决方案2】:

      您正在对寄存器进行(设置)一个值的 ORing。您的处理器有一个带有寄存器 ROUTELOC0 的 TIMER0。它可能有一点是“CC0LOC_LOC15”

      我建议您查看处理器的数据表,以了解具体含义。

      【讨论】:

      • 这是我的代码,为什么我们使用 OR 来设置到位置的路线? // 设置路由到位置 15 并启用 // TIM0_CC0 #15 是 PC10 TIMER0->ROUTELOC0 |= TIMER_ROUTELOC0_CC0LOC_LOC15; TIMER0->ROUTEPEN |= TIMER_ROUTEPEN_CC0PEN;
      • 您使用 OR 是因为您不想弄乱寄存器中的任何其他位。如果您只是设置它(TIMER0->ROUTELOC0 = TIMER_ROUTELOC0_CC0LOC_LOC15;),您会无意中清除寄存器中的所有其他位。至于你为什么要设置它,我不知道你用的是什么处理器,所以我不能告诉你。
      【解决方案3】:

      ->结构解引用运算符|=按位或赋值 运算符(复合赋值)。

      复合赋值:

      x |= y ;
      

      等价于:

      x = x | y ;
      

      这里重要的是要了解按位或 (|) 与布尔或 (||) 不同。此处用于设置x 中的特定位,而其他位未设置。

      例如,要将x 的两个最低有效位设置为 1:

          x: 10100000
          y: 00000011
            ---------
        x|y: 10100011
      

      【讨论】:

        猜你喜欢
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 2012-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        相关资源
        最近更新 更多