从长时间中提取每个单词的钻头操作

bitwise operation to extract each individual word from a long

本文关键字:操作 单词 长时间 提取      更新时间:2023-10-16

我有一个与汇编语言指令相对应的long。这是问题;第一个字段是opcode。它可以是1或2位。因此,例如在120602中,12是OpCode。在10602中,1是OpCode。

我想提取每个字段;如果OpCode是左侧的第一个1-2个数字,则在其右侧为1个,为OP1MODE,其右侧为1个为OP1GPR,其右侧为1是OP2Mode,最后,最后一部分是OP2GPR。理想情况下,我想将每个分配给其自身的变量以供以后使用,或在数组中分离它们。

我认为使用位操作可以实现。即面具和转移。

一个人将如何用刻度操作分配数字?

litwise/bitshifts除非将字段组合在基本2表示中,否则不会对您有任何好处。如图所示,您的数字是基本10。另一方面,您可以使用整数划分和Modulo进行显示的数字。

120602 / 10000 = 12
120602 % 10000 = 602

这些基本上对应于以下二进制数字的操作类型:

0x1D71A >>> 12 = 0x1D
0x1D71A & 0xFFF = 0x71A

做到这一点的一种简单方法(但无需刻度操纵),是定义一个包含五个整数的数组,然后填充它的数字数字。您将必须从数字的末尾开始,这很容易。

Java中的一个示例:

long number = 120602;
int[] op = new int[5];
for(int i = 0; i < 4; ++i) {
    op[i] = (int) (number % 10);
    number /= 10;
}
op[4] = (int) number;

和这里:

  • op[0] op2gpr
  • op[1] op2mode
  • op[2] op1gpr
  • op[3] op1mode
  • op[4] opcode