比较某些不产生所需结果的位

时间:2014-09-20 03:53:05

标签: c# binary comparison bit-shift bits

我有一个程序,它接收汇编代码的文本文件并解析它并将每一行更改为二进制代码。每行是一个单独的16位二进制代码(值存储为UInt 16),然后我将其放入数组中。代码是(以整数表示):

32768 //
65285 //
64514 //
65280 //
64512 //
65281 //
64513 // 
36352 //
65025 //
63488 // 
58899 // 
38400 //
65024 //
64257 //
64512 //
65026 //
64258 //
61952 //
59911 //
42496 //
65026 

现在每个代码如何被分解为7位(指令),1位(立即数),8位(值)。我现在正在尝试解析二进制代码的3个独立部分。我写了以下内容来做到这一点:

   public void doInstruction()
    {
       foreach(var op in IPE.opCodes)
       {
           Console.WriteLine("this is the original op code: " + op);
           var instr = (op >> 0) & 127;
           Console.WriteLine(instr + " THIS IS THE INSTRUCTION BINARY");
       }
    }

现在例如,第一个代码(32768 = 1000000000000000)。我使用上面的代码将二进制代码32768与二进制代码127进行比较,在我看来应该产生1000000(64应该出现在输出中)。但在我运行我的代码之后。我的输出是:

    this is the original op code: 32768
    0 THIS IS THE INSTRUCTION BINARY

当输出应为:

    this is the original op code: 32768
    64 THIS IS THE INSTRUCTION BINARY

我在这里错过了什么/做错了什么?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

右移9个位置以获得指令var intsr = op >> 9;它将包含7位指令。只需使用&:op & 256和值op & 255即可完成对即时(1位置9)和值的测试。