按位操作从长整数中提取每个单词

时间:2014-02-02 22:55:09

标签: java c++ c bit-manipulation

我有一个long,对应于汇编语言指令。 这是问题所在;第一个字段是Opcode。它可以是1或2位数。例如,在120602中,12是操作码。在10602中,1是操作码。

我想提取每个字段;其中操作码是左边的前1-2个数字,右边的1是op1mode,右边的1是op1gpr,右边的1是op2mode,最后,最后一部分是op2gpr。 理想情况下,我想将每个变量分配给它自己的变量以供以后使用,或者将它们分离在一个数组中。

我认为使用按位运算可以实现这一点;即面具和轮班。

如何通过按位操作分割数字?

2 个答案:

答案 0 :(得分:0)

除非字段以基数2表示形式组合,否则按位/位移对您没有任何好处。如图所示,您的数字是基数10.另一方面,您可以对您显示的数字使用整数除法和模数。

120602 / 10000 = 12
120602 % 10000 = 602

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

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

答案 1 :(得分:0)

一种简单的方法(但没有位操作),是定义一个包含五个整数的数组,然后填充你的数字的数字。您必须从数字的末尾开始,这样会更容易。

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]操作码