小编spe*_*ric的帖子

从 32 位数字中提取高位和低位 16 位字

我有以下“功能”代码,我可以写入一个 32 位计数器值并将其放置在 dsPic 中 32 位寄存器的高字和低字中。我正在使用 MPLAB X IDE 和 XC16 编译器。

int main()
{
  unsigned long My_Number;      // 32 bit
  unsigned int High_Word;       // 16 bit 
  unsigned int Low_Word;        // 16 bit    
    
  My_Number = 0x6000C000;       // Decimal 1610661888

  High_Word = (My_Number & (0x1FFFF << 16)) >> (16);     // Returns 6000
 
  Low_Word = (My_Number & 0xFFFF ) ;                     // Returns C000  

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么我需要使用 1FFFF 来屏蔽 High_Word。

我尝试了不同的值来查找返回的内容以找到解释,但有些东西没有点击,我不喜欢在不理解原因的情况下让任何东西起作用,因为这总是会导致问题。

编辑:在阅读了所有回复并进行了一些重新思考后,我意识到我可以使用 FFFFUL 来强制它为无符号长整数,而不是使用 1FFFF ,并且可以工作。更进一步,我可以看到,我可以使用而不是向左移动然后向右移动

High_Word = (我的编号 >> 16); …

c mask

3
推荐指数
1
解决办法
172
查看次数

标签 统计

c ×1

mask ×1