我正在从一个用Java语言编写的处理器仿真器中读取源代码,下面的代码行利用>>
运算符来读取存储在变量中的特定位的值。
//Bits 3-5 of IR denote addressing mode of instruction
int irAddressMode = (ir >> 2) & 0x07;
//Bits 6-7 of IR denote operation mode of instruction
int irOpMode = ir & 0x03;
我理解第二行,其中irOpMode
是确定的。通过使用0x03
对ir
中保存的值进行ANDing,我们只剩下位模式中的第6-7位的值(以小端字节顺序工作)。
然而,我不理解第一行中需要>>
运算符,为什么在ANDing之前需要先执行(ir >> 2)
,才能找到ir
变量中第3-5位的值?
发布于 2018-06-04 03:37:13
不需要获取这些位,但需要获取保存在第一个变量中的IR寻址模式。你可以通过与0x1C进行AND运算来获取这些位,但是这样的值就太大了。假设寻址模式为1,则会得到值4(二进制100)。移位操作解决了这个问题。
https://stackoverflow.com/questions/50670209
复制相似问题