访问整数中的各个位,为什么这需要使用>>?

时间:2018-06-03 19:28:54

标签: java

我正在从用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已确定。通过将ir中保存的值与0x03进行AND运算,我们只得到位模式中的位6-7的值(以little-endian工作)。

但是我不理解第一行中需要>>运算符,为什么在ANDing之前首先需要(ir >> 2)运行,以找到第3行中的第3-5位值ir变量?

1 个答案:

答案 0 :(得分:1)

不需要获取位,而是获得保存在第一个变量中的IR寻址模式。您可以使用0x1C来获取这些位,但随后该值将太大。假设寻址模式为1,您将得到值4(二进制100)。转换操作修复了这个问题。