如何根据计算确定哪些位 set/clear

How to Determine which bits to set/clear based on a computation

我有一个变量:

  ushort statusRegister;

此变量通过设置或清除其各个位来跟踪各种计算的结果。这些位定义为:

鉴于以下情况:

   Ushort  varA = 0x8B;
   Ushort varb = 0x24;
   Ushort result = varA + varB;

如何根据计算结果设置或清除这些单独的位?我不知道如何确定计算是否导致了进位或半进位,或者是否发生了溢出。

感谢任何建议

这是经过额外讨论后的答案。考虑到反馈后简单多了。

但是,我只是将进位位作为如何处理 statusRegister 中每一位的示例。不确定您是否需要我们扩展其他部分。

所以更新寄存器应该是这样的:

bool carry = result < Math.Max(varA, varB);
statusRegister |= (ushort)((carry) ? 0x1 : 0x0); //set the carry bit

根据您的情况,您可能需要也可能不需要在迭代之间清除状态寄存器。如果是这样,你可以这样做:

statusRegister &= 0xFFFE; //clear the carry bit first
statusRegister |= (ushort)((carry) ? 0x1 : 0x0); //then set the carry bit