位掩码操作:以下代码在C中的含义是什么?

时间:2018-04-23 02:06:58

标签: c

我正在尝试调试一段代码,我无法弄清楚下面的代码实际上是做什么的。任何人都可以帮我解释或给我关于以下代码功能的想法吗?

uint8_t get_pca9955a_slave_loaded(uint8_t _slave)
      {

        uint8_t x = (uint8_t)(_slave / 16);
        uint8_t y = (uint8_t)(_slave % 16);
        uint16_t mask = 1U << y;

       if (check_pca9955a_slave_valid(_slave)) {
           return (uint8_t)((pca9955a_slaves_loaded[x] & mask) ? 1U : 0U);
        } else {
                return 0U;
               }
       }

亲切的问候, 翔

1 个答案:

答案 0 :(得分:0)

它将一个字节解包为高半字节x和低半字节y。取mod 16与取四个最低位相同,除以16与取剩余位相同。

然后使用y计算一个位掩码,将x作为偏移量放入某种你没有共享的全局变量表中,检查是否在条目x中设置了位y,并返回1或0无符号字节。