开发者社区 问答 正文

C语言中用按位或( | )定义变量是什么玩法?

为什么像下面这样定义两个数组?

const uint16_t LEDS = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
const uint16_t LED[4] = {GPIO_Pin_12, GPIO_Pin_13, GPIO_Pin_14, GPIO_Pin_15};

展开
收起
a123456678 2016-06-07 18:35:32 2266 分享 版权
1 条回答
写回答
取消 提交回答
  • 就你给的代码来看, 这是为了控制四个LED的, 且应该有类似这样的定义:

    #define GPIO_Pin_12 (1<<12)
    #define GPIO_Pin_13 (1<<13)
    #define GPIO_Pin_14 (1<<14)
    #define GPIO_Pin_15 (1<<15)

    通常要点亮LED 0, 将对应的GPIO(一个寄存器, 假设就叫GPIO_LED)的值与GPIO_Pin_12做或(|)运算, 即GPIO_LED | GPIO_Pin_12, 对应到你的变量定义也可以是GPIO_LED | LED[0]. 类推点亮其他LED.

    有时我们需要一次把四个LED全都点亮, 我们可以这么做: GPIO_LED | LED[0] | LED[1] | LED[2] | LED[3].
    等价于GPIO_LED | (LED[0] | LED[1] | LED[2] | LED[3]), 括号里的东西不就是你的变量LEDS么~

    2019-07-17 19:30:43
    赞同 展开评论
问答分类:
问答地址: