如何根据计算确定哪些位 set/clear
How to Determine which bits to set/clear based on a computation
我有一个变量:
ushort statusRegister;
此变量通过设置或清除其各个位来跟踪各种计算的结果。这些位定义为:
- Bit0 = 进位
- Bit1 = 溢出
- Bit2 = 零
- Bit3 = 符号
- Bit4 = IRQ
- Bit5 = 辅助进位
- Bit6 = 1 未使用
- Bit7= 1 未使用
鉴于以下情况:
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
我有一个变量:
ushort statusRegister;
此变量通过设置或清除其各个位来跟踪各种计算的结果。这些位定义为:
- Bit0 = 进位
- Bit1 = 溢出
- Bit2 = 零
- Bit3 = 符号
- Bit4 = IRQ
- Bit5 = 辅助进位
- Bit6 = 1 未使用
- Bit7= 1 未使用
鉴于以下情况:
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