我有以下“功能”代码,我可以写入一个 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); …