我有下面的代码片段来使用按位运算符检查 RAM 冗余值
uint16 initial_value = (uint16)(myvalue_32bit & 0xFFFFu);
uint16 toggle_value = ~((uint16)(myvalue_32bit >>16));
if(initial_value == toggle_value)
{
print("correct value");
}
else
{
print("false value");
}
我不明白代码前两行发生了什么。有人可以解释为什么这里使用按位 AND 和按位 NOT 运算符吗?也许用一个例子来解释会有所帮助。
您的 32 位值由两部分构成。
toggle_value
将高位部分作为新的16位无符号值,然后二进制将其取反。根据第 2 页,它应该具有负下部分的值,现在它应该具有与 32 位 balue 的下部分相同的值。initial_value
保存着32位值的低位部分。如果它们相等,则表示 32 位值是正确的(理解此错误检查算法)。