如何根据计算确定要设置/清除的位

时间:2016-06-15 17:37:52

标签: c# bit-manipulation bit

我有一个变量:

  ushort statusRegister;

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

  • Bit0 = carry
  • Bit1 =溢出
  • Bit2 = Zero
  • Bit3 = Sign
  • Bit4 = IRQ
  • Bit5 = Aux Carry
  • Bit6 = 1未使用
  • Bit7 = 1未使用

鉴于以下内容:

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

如果给定计算结果,如何设置或清除这些单独的位?我无法弄清楚如何确定计算是否导致进位或半进位或是否发生溢出。

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

经过额外讨论后,这是答案。考虑到反馈意见后要简单得多。

但是,我只关注进位位作为如何处理statusRegister中每个位的示例。不确定是否需要我们扩展其他位。

因此更新寄存器将类似于:

<add key="quartz.jobStore.driverDelegateInitString" value="triggerPersistenceDelegateTypes=SolutionName.QuartzService.Core.Triggers.CustomTriggerPersistenceDelegate, SolutionName.QuartzService.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

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

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