如何使用按位AND和按位NOT运算符检查冗余值? [已关闭]

问题描述 投票:0回答:1

我有下面的代码片段来使用按位运算符检查 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 运算符吗?也许用一个例子来解释会有所帮助。

c bit-manipulation bitwise-operators
1个回答
0
投票

您的 32 位值由两部分构成。

  1. 低16位部分。
  2. 高 16 位部分具有二进制取反的值 低部分
  • toggle_value
    将高位部分作为新的16位无符号值,然后二进制将其取反。根据第 2 页,它应该具有负下部分的值,现在它应该具有与 32 位 balue 的下部分相同的值。
  • initial_value
    保存着32位值的低位部分。

如果它们相等,则表示 32 位值是正确的(理解此错误检查算法)。

© www.soinside.com 2019 - 2024. All rights reserved.