【问题标题】:Comparing certain bits not producing desired results比较某些未产生预期结果的位
【发布时间】:2014-09-20 12:55:57
【问题描述】:

我有一个程序,它接收一个汇编代码文本文件并对其进行解析并将每一行更改为二进制代码。每行都是一个单独的 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

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

【问题讨论】:

    标签: c# binary comparison bit-shift bits


    【解决方案1】:

    右移 9 位得到指令 var intsr = op >> 9; 它将包含 7 位指令。可以只使用 &: op & 256 和值 op & 255 来测试立即数(1 位位置 9)和值。

    【讨论】:

    • 非常感谢,我显然是以相反的方式做的,我现在明白它是如何工作的。代码也能按现在的方式运行,再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多