我有以下代码,它“起作用”,因为我可以写入一个 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;
}
我不明白的是为什么我需要使用 1FFFF 来屏蔽 High_Word。
我尝试了不同的值来查找返回的内容以找到解释,但有些东西没有点击,我不喜欢在不了解原因的情况下让任何东西起作用,因为这总是会导致问题。
我不明白的是为什么我需要使用 1FFFF 来屏蔽 High_Word,虽然左移 16 位会有
这没有意义,如果
sizeof(int) == 4
,它可能会调用未定义的行为。
我相信最初的程序员只是在输入函数时错误地点击了
1
int main()
{
unsigned long My_Number;
unsigned int High_Word;
unsigned int Low_Word;
My_Number = 0x6000C000UL;
High_Word = My_Number>> (16);
Low_Word = My_Number & 0xFFFF;
printf("%x %x\n", High_Word, Low_Word);
return 0;
}